第11讲内容
为什么第一段对old运用了方法后,new列表会跟着变,但是把old重新赋值后,new就不会变呢?是因为 sort是对old进行处理,所以new会跟着变?可是重新赋值的话,并不影响new的值?
第一段:
>>> old =
>>> new = old
>>> old.sort(reverse=True)
>>> old
>>> new
第二段:
>>> old =
>>> old
>>> new
感谢各位大神的回答~~ {:5_109:} 要善用论坛搜索功能
看这里,这里有大佬的详解
<font color="red">[已解决]</font>11讲和12讲拷贝问题
https://fishc.com.cn/thread-184836-1-1.html
(出处: 鱼C论坛)
这个很容易理解,看我发的图,原来old指向列表对象,当old=new时,new也指向列表对象,然后你new又重新改变了指向的对象,那么old又不会改变,懂了吧!!,这就是为什么python被称为胶水性语言的其中一种原因,你这个问题很棒,多从python的c语言原理出发,你就会懂。 我们可以通过id()来查看
第一段
>>> old =
>>> new = old
>>> id(old)
43573192
>>> id(new)
43573192
>>> old.sort(reverse=True)
>>> old
>>> id(old)
43573192
>>> new
>>> id(new)
43573192
第二段
>>> old=
>>> old
>>> id(old)
49640072
>>> new
>>> id(new)
43573192
第一段实际上old和new的id相同,好比他们都指向同一个标签
sort()方法是让这个标签发生了改变
但是old和new依旧指向这一个标签
第二段切断了old之前指向的标签,让他指向了别处
而new依旧指向原来的标签,这时候他们的id已经不同了,没有了联系 本帖最后由 jackz007 于 2020-11-25 12:21 编辑
old 和 new 是标识符, 和 是对象,Python 通过标识符来识别和处理对象,所以,为变量赋值只不过是将标识符绑定到对象。
表达式
old =
实现了标识符 old 和列表对象 的绑定,而语句
new = old
则实现了 new 与 old 两个标识符共同对同一个列表对象 的绑定,这就意味着从此以后,无论通过 old 还是 new 访问到的均为同一个列表对象。
old.sort(reverse=True)
这一句通过标识符 old 利用对象的方法对列表对象元素顺序进行了重排,重排前后,目标对象始终是同一个,只不过,对象内容发生了改变,old 、new 与对象的绑定关系并未发生改变,所以,old 和 new 呈现出的内容是完全一样的。
后来,又执行了这一句
old =
使标识符 old 与新的列表对象 实现了绑定,从此,old 绑定了新的对象,而 new 依然绑定的是原来的对象,old 和 new "分道扬镳"。
页:
[1]