python: nums 和 nums[:] 的区别

2021/9/20 20:57:02

本文主要是介绍python: nums 和 nums[:] 的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近在刷题时遇到一个问题,添加数组 nums 和添加 nums[:] 会得到不同的输出结果。
写个例子:

nums = [1,2,3,4,5]  # 创建一个数组
res = []
res.append(nums)
nums[0], nums[4] = nums[4], nums[0]  # 交换数组中的元素
res.append(nums)
print(res)

以上这个例子,先创建一个包含5个整数的数组 nums,并添加到数组 res 中;接着交换数组 nums 的第1个元素和第5元素,并且添加到数组 res 中,不出意外,结果应该是:
[[1, 2, 3, 4, 5], [5, 2, 3, 4, 1]]

但是,最后的结果是:
[[5, 2, 3, 4, 1], [5, 2, 3, 4, 1]]

但是呢,如果把 res.append(nums) 改成 res.append(nums[:]),像下面这样:

nums = [1,2,3,4,5]  # 创建一个数组
res = []
res.append(nums[:])
nums[0], nums[4] = nums[4], nums[0]  # 交换数组中的元素
res.append(nums[:])
print(res)

就得到如下结果:
[[1, 2, 3, 4, 5], [5, 2, 3, 4, 1]]

后来想了很久,nums 和 nums[:] 指向的对象不同,nums 是数组的对象,而 nums[:] 是对指数组 nums 的元素,res.append(nums) 是把整个对象添加到 res 中,所以 res = [ nums, nums],当 nums 发生改变时,res 中之前添加的 nums 也会发生改变;
而 res.append(nums[:]) 是把 nums 中的所有元素添加到 res,而非 nums 对象本身。

为了防止以后出现重复错误,写下该博客,让自己加深影响!



这篇关于python: nums 和 nums[:] 的区别的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程