好きだ 发表于 2018-8-6 17:32:52

分片“拷贝”的问题

各位鱼油,我对下面的代码产生了疑问:
>>> old =
>>> new = old
>>> old =
>>> print(new)



按照我的逻辑,我来分析下这几句代码:
new = old 将这个列表同时贴上了new old 两个标签,也就是说new、old两个变量同时指向这个列表。
那么问题来了,将这个列表赋值给了old变量,那么就应该实现了覆盖啊,打印print(new)应该是 吧。

不明所以的我,进行了这么一般测试:(将第二三行的代码执行顺序换了下)
>>> old =
>>> old =
>>> new = old
>>> print(new)


对此,有点费解,请各位鱼油高抬贵口,讲解一番。

thexiosi 发表于 2018-8-6 17:37:24

hi 请lz参考

>>> old =
>>> new = old
>>> id(old)
53994888
>>> id(new)
53994888
>>> old =
>>> id(old)   #变量old的内存地址发生了变化
53808840
>>> id(new)
53994888

拉了盏灯 发表于 2018-8-6 17:43:37

第一个的第二行,把new赋值,然后你修改的有事old的值,所以并不影响new.

好きだ 发表于 2018-8-6 17:44:51

thexiosi 发表于 2018-8-6 17:37
hi 请lz参考

!!!!蟹蟹啦.另外 我也是海贼迷。哈哈哈

好きだ 发表于 2018-8-6 17:48:33

拉了盏灯 发表于 2018-8-6 17:43
第一个的第二行,把new赋值,然后你修改的有事old的值,所以并不影响new.

嗯!我知道这个效果了,但鱼友 我想知道的是 为什么会产生这样的结果。

thexiosi 发表于 2018-8-6 19:09:51

好きだ 发表于 2018-8-6 17:44
!!!!蟹蟹啦.另外 我也是海贼迷。哈哈哈

没事 ,客气啦:) 海贼迷握个爪

Tigeroad 发表于 2020-3-29 21:45:28

我还是不太明白为什么地址只有old会变,既然赋值了,即使变化不应该同时变化吗?希望大家解答一下,谢谢!
页: [1]
查看完整版本: 分片“拷贝”的问题