python中nums和nums[:]的区别


 

今天看到一种写法:res.append(nums[:]),突然觉得nums和nums[:]表示的是同一个结果呀!

nums = [1,2,3,4,5]

print(nums)

print(nums[:])

运行结果:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

为什么这里不写成res.append(nums)呢?

 

其实这两种写法是有区别的:

res.append(nums)是将nums这个列表对象添加进res中,

但是res.append(nums[:])是将res的一个副本添加进res中。

首先我们定义

nums = [1,3,3,4,5]

res = []

现在有个需求是:先将nums添加进res中,然后将nums中的第三个元素和第四个元素互换,再添加进res中,即我们要得到

res = [[1,2,3,4,5],[1,2,4,3,5]]

如果我们使用

res.append(nums)

nums[2],nums[3]=nums[3],nums[2]

res.append(nums)

print(res)

结果:[[1, 2, 4, 3, 5], [1, 2, 4, 3, 5]],不符合要求。

 

但是使用

res.append(nums[:])

nums[2],nums[3]=nums[3],nums[2]

res.append(nums[:])

print(res)

结果:[[1, 2, 3, 4, 5], [1, 2, 4, 3, 5]],符合要求

原因就在于如果我们直接将nums对象添加进res中,当nums这个对象发生改变时res中的nums也会发生改变。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 面试题-python3 个包含n个整数的数组nums,判断nums中是否存在三个元素,a,b,c,使得a+b+c=0 for (auto x : nums) lua -- table.nums Leetcode练习(Python):数组类:第162题:峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞。 刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 【JAVA】foreach语句 -- for(int I : nums){} Leetcode练习(Python):数组类:第15题:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 Leetcode练习(Python):数组类:第152题:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字)。 最接近的三数之和(给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数, 使得它们的和与 target 最接近。返回这三个数的和)
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM