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不一致了,这里晕了
dong811019 发表于 2021-5-30 17:03
>>> b =
>>> id()
47226432#大佬,为啥我这个有赋值的列表,id和变量b的也不一致?
不可变类型数据,因为不可改变所以就算内存一致也不影响实际情况,并且可以节约内存
但可变类型数据不同,若 id 一致,你只要一改变就会导致指向此 id 的所有数据一同发生改变
而你这里 b = 是直接赋值给了 b ,而 id() 是临时创建,且列表是可变元素,所以不会出现 id 相同
列表是一个容器,你没改变列表本身,它的 id 始终不会发生改变
即你这里“修改”列表 只是往列表里增加元素,或者替换元素
举个生活中的例子:
你有一个钱包,你往里面放钱,又或者你从这个钱包中取钱,你始终都是在你自己这个钱包上进行操作的
难道你往里面放钱时,你的钱包从 七匹狼牌钱包 变成 LV牌钱包 的吗~? 本帖最后由 Twilight6 于 2021-5-30 16:59 编辑
另外你代码最后:
>>> id()
47227968
>>> id()
47227968
是相当于零时创建列表,一创建完就被内存销毁回收了,因为你没有给列表具体赋值
但是此时 id 虽然相同,但是本质上已经不是一个列表了,只是新创建的列表是前个被销毁列表有着相同的 id
Twilight6 发表于 2021-5-30 16:58
另外你代码最后:
>>> b =
>>> id()
47226432#大佬,为啥我这个有赋值的列表,id和变量b的也不一致?
>>> id(b)
47228160
>>> c = 3
>>> id(c)
8791345207008
>>> id(3)
8791345207008#不可变对象和变量id就是一致的
页:
[1]