帅飞 发表于 2020-5-30 19:23:10

Python第11、12节列表:赋值问题

>>> list1 =
>>> list2 = list1
>>> list1.sort()
>>> list1

>>> list2




>>> old =
>>> new = old
>>> old =
>>> print(new)


以上两份代码,为什么将 list1 赋值给 list2 之后,对 list1 排序,list2 也进行了排序;而第二份代码,将 old 赋值给 new 之后,对 old 重新赋值,new 却不变?

heidern0612 发表于 2020-5-30 19:29:35

你把变量名理解为存在栈区,赋值结果理解为存在堆区。

1、list1由栈区指向堆区,

list2也由栈区指向堆区。

所以两者实际上指向的是同一个堆区的内存地址。



2、old由栈区指向堆区,new也由栈区指向堆区。

old重新改了指向,由栈区指向堆区.

new的指向仍旧是堆区的。

liuzhengyuan 发表于 2020-5-31 07:22:41

赋值就相当于重新建立了一个同名列表

帅飞 发表于 2020-5-31 09:21:31

heidern0612 发表于 2020-5-30 19:29
你把变量名理解为存在栈区,赋值结果理解为存在堆区。

1、list1由栈区指向堆区,


sort 相当于把堆区的内容改变了?
对old 重新赋值,原来的堆区依然在那不变,只是old 指向了新的堆区?

heidern0612 发表于 2020-5-31 09:26:17

帅飞 发表于 2020-5-31 09:21
sort 相当于把堆区的内容改变了?
对old 重新赋值,原来的堆区依然在那不变,只是old 指向了新的堆区?

1、sort只是个方法,指向的还是原来的堆区。只是简单的把堆区的内容排列了下而已。

2、是的。

帅飞 发表于 2020-5-31 09:41:59

heidern0612 发表于 2020-5-31 09:26
1、sort只是个方法,指向的还是原来的堆区。只是简单的把堆区的内容排列了下而已。

2、是的。

好的,谢谢{:5_109:}

zwhe 发表于 2020-6-4 10:45:54

{:7_130:}
页: [1]
查看完整版本: Python第11、12节列表:赋值问题