dong811019 发表于 2021-5-30 16:47:15

Python把列表赋值给变量,列表修改时为啥列表和变量的id不一样?

把列表赋值给变量,列表修改部分值时,变量的id不变(我理解这里列表应该是列表是可变对象) ,但是列表修改前、后的id是一样的,且和变量不一致,这里不懂啥原因。

>>> l1 =
>>> id(l1)
46789312
>>> l1.append(5)
>>> l1

>>> id(l1)
46789312
>>> l1 = 'py'
>>> l1

>>> id(l1)
46789312      #列表修改后,l1变量id始终没变

>>> id()
47227968   #修改后的列表
>>> id()
47227968    #修改前的列表和修改后的列表id一致,却和变量l1不一致了,这里晕了

Twilight6 发表于 2021-5-30 16:47:16

dong811019 发表于 2021-5-30 17:03
>>> b =
>>> id()
47226432#大佬,为啥我这个有赋值的列表,id和变量b的也不一致?



不可变类型数据,因为不可改变所以就算内存一致也不影响实际情况,并且可以节约内存

但可变类型数据不同,若 id 一致,你只要一改变就会导致指向此 id 的所有数据一同发生改变

而你这里 b = 是直接赋值给了 b ,而 id() 是临时创建,且列表是可变元素,所以不会出现 id 相同

Twilight6 发表于 2021-5-30 16:52:39



列表是一个容器,你没改变列表本身,它的 id 始终不会发生改变

即你这里“修改”列表 只是往列表里增加元素,或者替换元素

举个生活中的例子:

你有一个钱包,你往里面放钱,又或者你从这个钱包中取钱,你始终都是在你自己这个钱包上进行操作的

难道你往里面放钱时,你的钱包从 七匹狼牌钱包 变成 LV牌钱包 的吗~?

Twilight6 发表于 2021-5-30 16:58:08

本帖最后由 Twilight6 于 2021-5-30 16:59 编辑


另外你代码最后:

>>> id()
47227968   
>>> id()
47227968   

是相当于零时创建列表,一创建完就被内存销毁回收了,因为你没有给列表具体赋值

但是此时 id 虽然相同,但是本质上已经不是一个列表了,只是新创建的列表是前个被销毁列表有着相同的 id

dong811019 发表于 2021-5-30 17:03:58

Twilight6 发表于 2021-5-30 16:58
另外你代码最后:




>>> b =
>>> id()
47226432#大佬,为啥我这个有赋值的列表,id和变量b的也不一致?
>>> id(b)
47228160

>>> c = 3
>>> id(c)
8791345207008
>>> id(3)
8791345207008#不可变对象和变量id就是一致的

页: [1]
查看完整版本: Python把列表赋值给变量,列表修改时为啥列表和变量的id不一样?