雨女无瓜 发表于 2019-6-27 11:29:00

请问各位大佬,为什么上面的b不会改变而下面的会改变?

>>> a = 1
          >>> b = a
          >>> a = 2
          >>> b
          1
          >>>
          >>> a =
          >>> b = a
          >>> a.sort(reverse = 1)
          >>> b
         

Krant5 发表于 2019-6-27 11:45:40

集合类型和基本类型不一样呀

弓戈 发表于 2019-6-27 15:05:11

它们的类型不一样,
基本类的赋值完了就给了一个明确的基本类的地址。
列表由于赋值以后实际上赋的地址值,所以当列表的内容变化以后,两个都会变。
如果列表类的想赋值而不继承地址则用
a = []
b = a.copy()

雨女无瓜 发表于 2019-6-27 21:35:01

弓戈 发表于 2019-6-27 15:05
它们的类型不一样,
基本类的赋值完了就给了一个明确的基本类的地址。
列表由于赋值以后实际上赋的地址值 ...

表示“列表由于赋值以后实际上赋的地址值,所以当列表的内容变化以后,两个都会变。”这句话没看懂

弓戈 发表于 2019-6-28 16:22:04

雨女无瓜 发表于 2019-6-27 21:35
表示“列表由于赋值以后实际上赋的地址值,所以当列表的内容变化以后,两个都会变。”这句话没看懂

就是列表类型的赋值过程传递的是他们的地址,
如果这时候修改了a的话,b也是指向这个地址,所以b也跟着改。
可以用id()来查看对应得内存地址,你跑一下下面这个程序就一目了然了。
a = list()
b = a
c = a.copy()
print(id(a),id(b),id(c))
页: [1]
查看完整版本: 请问各位大佬,为什么上面的b不会改变而下面的会改变?