Python第11、12节列表:赋值问题
>>> list1 =>>> list2 = list1
>>> list1.sort()
>>> list1
>>> list2
>>> old =
>>> new = old
>>> old =
>>> print(new)
以上两份代码,为什么将 list1 赋值给 list2 之后,对 list1 排序,list2 也进行了排序;而第二份代码,将 old 赋值给 new 之后,对 old 重新赋值,new 却不变? 你把变量名理解为存在栈区,赋值结果理解为存在堆区。
1、list1由栈区指向堆区,
list2也由栈区指向堆区。
所以两者实际上指向的是同一个堆区的内存地址。
2、old由栈区指向堆区,new也由栈区指向堆区。
old重新改了指向,由栈区指向堆区.
new的指向仍旧是堆区的。
赋值就相当于重新建立了一个同名列表 heidern0612 发表于 2020-5-30 19:29
你把变量名理解为存在栈区,赋值结果理解为存在堆区。
1、list1由栈区指向堆区,
sort 相当于把堆区的内容改变了?
对old 重新赋值,原来的堆区依然在那不变,只是old 指向了新的堆区? 帅飞 发表于 2020-5-31 09:21
sort 相当于把堆区的内容改变了?
对old 重新赋值,原来的堆区依然在那不变,只是old 指向了新的堆区?
1、sort只是个方法,指向的还是原来的堆区。只是简单的把堆区的内容排列了下而已。
2、是的。 heidern0612 发表于 2020-5-31 09:26
1、sort只是个方法,指向的还是原来的堆区。只是简单的把堆区的内容排列了下而已。
2、是的。
好的,谢谢{:5_109:} {:7_130:}
页:
[1]