蛋小蛋 发表于 2020-4-11 08:32:58

python 第十一课 关于列表复制的问题

这两种都是一样的赋值,为什么结果不一样?一个 new 跟着old 变化,一个保持不变?不是应该跟着变化才对吗?
第一种
>>> old =
>>> new = old
>>> new1 = old [ : ]
>>> old.append(7)
>>> print(old,new,new1)


第二种
>>> old =
>>> new = old
>>> old =
>>> old

>>> new

>>> print(old,new)

老八秘制 发表于 2020-4-11 08:35:11

如果将原列表被直接赋值,那么与它关联的切片其实是不会变化的

BngThea 发表于 2020-4-11 08:38:04

python中变量名只是标签而已,可以多个标签指向同一块内存
new=old
意味着new和old这两个标签指向了同一块内存
所以你对new和old指向的数据进行改动,比如列表的pop,sort,reverse等操作都会对两者同时产生作用,因为他们修改了内存中的数据
而你将old重新赋值,意味着old标签指向另外一块内存,从此old和new再无瓜葛

dudaguo 发表于 2020-4-11 09:27:16

>>> old =                               这个列表贴上俩old的标签
>>> new = old                                        这个列表又贴上了 new的标签
>>> new1 = old [ : ]                              定义了一个新的列表并贴上了new1的标签
>>> old.append(7)                                 old这个列表末尾增加元素7 (这个列表还有new这个标签)
>>> print(old,new,new1)


第二种
>>> old =             这个列表贴上了old这个标签
>>> new = old                      这个列表又贴上了 new的标签
>>> old =                   old这个标签被贴到另一个列表上
>>> old

>>> new

>>> print(old,new)


这样应该比较详细了

EveLee 发表于 2020-4-11 09:30:15

第一种:
<--- 此列表的标签为old和new,执行old.append(7)后列表变为 -->,扩展后的列表的标签仍然为old和new

第二种
<--- 此列表的标签为old和new,执行old = 后,old变为了列表的标签,而new仍然为列表的标签

蛋小蛋 发表于 2020-4-11 10:31:24

EveLee 发表于 2020-4-11 09:30
第一种:
,扩展后的列表的标签仍然为old和new



感谢感谢,已经懂了{:5_91:}

蛋小蛋 发表于 2020-4-11 10:32:10

EveLee 发表于 2020-4-11 09:30
第一种:
,扩展后的列表的标签仍然为old和new



感谢感谢,已经懂了{:7_113:}

蛋小蛋 发表于 2020-4-11 10:32:41

EveLee 发表于 2020-4-11 09:30
第一种:
,扩展后的列表的标签仍然为old和new



感谢感谢,已经懂了{:9_227:}

蛋小蛋 发表于 2020-4-11 10:33:16

老八秘制 发表于 2020-4-11 08:35
如果将原列表被直接赋值,那么与它关联的切片其实是不会变化的

感谢感谢,已经懂了{:10_298:}

老八秘制 发表于 2020-4-11 10:33:48

蛋小蛋 发表于 2020-4-11 10:33
感谢感谢,已经懂了

跪求最佳
页: [1]
查看完整版本: python 第十一课 关于列表复制的问题