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 对象本身。

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

  • 36
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值