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, 2, 3, 4, 1], [5, 2, 3, 4, 1]]

为什么是上述结果,而不是[[1, 2, 3, 4, 5], [5, 2, 3, 4, 1]] ?

实验分析:

实验1:

temp = [1,2,3,4,5]  # 创建一个数组
nums1 = [1,3,5]
nums2=[2,4,6]

#不同赋值方式
nums1=temp   #方式1
nums2[:]=temp  #方式2

赋值前

赋值后

Id地址

temp = [1,2,3,4,5]    #Id of temp:1890381280960
nums1 = [1,3,5]     #Id of nums1:1890381306240
nums1=temp       #Id of nums1:1890381280960
nums2=[2,4,6]      #Id of nums2:1890381306112
nums2[:]=temp    #Id of nums2:1890381306112

实验1:由此可见,nums1=temp 只是修改了nums1指向的对象地址,由 [1,3,5]对象变更为[1,2,3,4,5]。nums2[:]=temp依旧指向自身对象[2,4,6]地址,但是修改了元素本身。

实验2:

temp = [1,2,3,4,5]  # 创建一个数组
nums1 = [1,3,5]
nums2=[2,4,6]
nums1=temp
nums2=temp[:]

赋值前

赋值后

Id地址

temp = [1,2,3,4,5]    #Id of temp:2016601260864
nums1 = [1,3,5]     #Id of nums1:2016601290240
nums1=temp       #Id of nums1:2016601260864
nums2=[2,4,6]       #Id of nums2:2016601290112
nums2=temp[:]    #Id of nums2:2016601290240

实验2:由此可见,nums1=temp 只是修改了nums1指向的对象地址,由 [1,3,5]对象变更为[1,2,3,4,5]。nums2=temp[:],开辟了新的内存空间指向了另外一个地址(暂时理解为,nums2指向一个地址,元素赋值时只能开辟新的内存空间储存元素,然后将nums指向这个地址,与nums1释放前的地址相同应属于偶然)

结论:

       nums是指向对象的地址,而nums[:]是对象的全部元素。

python: nums 和 nums[:] 的区别-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值