芥末a 发表于 2020-2-27 23:18:00

求助python012讲一个关于列表的问题

>>> old =
>>> new = old
>>> old =
>>> print(new)
会打印:

为什么print(new)打印出来的值不是
new和old不是都指向同一个地址吗,old的值变为了new打印出来应该也是吧,这一块没有弄懂

fish_游鱼 发表于 2020-2-27 23:25:32

和是两个列表对象
old后一个赋值操作改变了所指向的对象

jackz007 发表于 2020-2-28 00:22:29

>>> old =    # old 指向列表
>>> new = old               # new 与 old 一同指向列表
>>> old =                # old 指向新的列表 ,从此,old 与 new 分道扬镳
>>> print(new)            # new 依然指向列表

芥末a 发表于 2020-2-28 09:26:02

jackz007 发表于 2020-2-28 00:22


我看小甲鱼的教学视频,如果old.sort(),改变了old的值的话,new也会随之改变,为什么这种重新赋值的情况就不会改变new的值呢

WXDWX 发表于 2020-2-28 10:13:02

内存中有两个数据:,和,执行old = ,将old标签指向数据 ,执行new= old,也将new标签指向了,当执行 old= 时,将old标签指向了数据,而new的标签指向并没有改变,所以你打印print(new)时,打印,这个没有错

jackz007 发表于 2020-2-28 10:54:14

本帖最后由 jackz007 于 2020-2-28 11:01 编辑

芥末a 发表于 2020-2-28 09:26
我看小甲鱼的教学视频,如果old.sort(),改变了old的值的话,new也会随之改变,为什么这种重新赋值的情况 ...

      一个对象通过方法改变自己的操作并不能改变其身份。就是说,一个列表在使用自己的方法重新排序以后,改变的只是其外在形式 ,并不能把这个列表变成另外一个列表,就好比一个人不能因为换了一件衣服就变成另外的一个人。在 Python 中,定义变量是通过赋值来实现的,只要没有被重新赋值,那么,变量一经定义,会始终指向原来的对象。不管这个对象怎么折腾自己,这种对应关系始终都不会改变。
      在本例中,变量 old 与 new 指向同一个对象,old . sort() 改变的是 old 所指向的对象,并不是 old 本身,于是,我们就会发现,old 与 new "一起" 改变了。

芥末a 发表于 2020-2-28 15:13:52

jackz007 发表于 2020-2-28 10:54
一个对象通过方法改变自己的操作并不能改变其身份。就是说,一个列表在使用自己的方法重新排序 ...

看明白了,感谢大佬{:5_106:}
页: [1]
查看完整版本: 求助python012讲一个关于列表的问题