为啥如下的Python代码会产生这样的区别,该怎样解释

有大图,流量慎入为啥如下的Python代码会产生这样的区别,该怎样解释

这是你一开始创建的列表为啥如下的Python代码会产生这样的区别,该怎样解释

然后你让key = lists,在这里你可以看见并不是一个名为“key”的指针指向lists,而是作为一个单独的对象,被赋值为4而已为啥如下的Python代码会产生这样的区别,该怎样解释
【为啥如下的Python代码会产生这样的区别,该怎样解释】
所以就不会改变输出了为啥如下的Python代码会产生这样的区别,该怎样解释

这里看出你的tee是和lists指向同一个列表,所以改变其中一个,另一个同时变化。在此感谢Python Tutor 建议对python中一些细节不能辨析的时候用这个网站清楚的看到内存中的变化。
■网友
key这个引用指向的是4:int这个对象, 而非是lists这个对象. 事实上也不存在这么一个对象. 只是lists维护了一个对4的引用而已.lists = 1 这句将lists维护的引用从指向4改成了指向1:int这个对象. 但4:int这个对象本身没发生变化. key指向的也还是4:int.顺带一提.不要起这样的变量名..key一般用在key-value对这样的场合, 比如处理dict的时候. lists表示的应该是一个list的list之类的东西.这里list的命名可以用numbers. key可以改成origin_value.
■网友
key = lists这行代码 将lists引用的对象,赋值给key ,那么key 和 list 都是list值对象的引用。lists = 1 这行代码,将lists的引用指向了 1 这个对象。并没有修改key 的引用。所以结果是4 1
■网友
python对小整数进行了缓存,一般是。跟字典没啥关系,最简单的试一下这个例子即可:a = 4b = 4id(a) == id(b)b = 5看看 a 会变吗?
■网友
先把 值和引用分清楚。list是个引用。 key是个值。剩下的就简单了。key=list把list这个指针指向的内容赋值给key.list=1把list指向的值改为1因为key是值, 不是指针,所以不会改。即使key是个指针, 也不会改。list=list (4)list=1print list, list输出 4, 1原因是:list=list 这句的意思是 将list指向的值拷贝到list指向的值, 并没有发生指针指向的修改。总结两点:1 分清这是一个值还是一个引用2 Python中,你几乎不能修改引用的指向, 只能修改引用指向的值。


    推荐阅读