关于不可变对象和可变对象,申明相同值的两个变量是否使用同一块内存空间?
本帖最后由 easyboy 于 2021-6-6 22:16 编辑text_01 = "I love python"
text_02 = "I love python"
print(text_01 is text_02) # True
list_01 =
list_02 =
list_03 = list_01
print(list_01 is list_02) # False
print(list_01 is list_03) # True
tuple_01 = 1, 2, 3
tuple_02 = 1, 2, 3
print(tuple_01 is tuple_02) # True
以上代码是否可以理解为
1. Python对于不可变对象而言,申明新的变量,其值等于一个已有的变量时,会使用同一块内存空间来节约内存?
2. Python对于可变对象而言,申明新的变量必然会开辟新的内存空间?
is 是比较两个对象是否完全相同,或是说内存地址是否相同
你这里创建了两个列表,虽然值都是相同的,但是属于两个不同内存地址的变量
你可以通过 id 函数来判断对象在内存中的地址,例如:
list_1 =
list_2 =
print(id(list_1))
print(id(list_2))
执行结果:
1950096773512
1950096774024
内存地址不相同,所以返回 False
Twilight6 发表于 2021-6-6 22:12
is 是比较两个对象是否完全相同,或是说内存地址是否相同
你这里创建了两个列表,虽然值都是相同的, ...
不好意思 我刚才重新描述了一下题目
tuple_01 = 1, 2, 3
tuple_02 = 1, 2, 3
print(tuple_01 is tuple_02) # True
列表那个我已经明白了,元祖这个为什么又是true了呢 easyboy 发表于 2021-6-6 22:20
不好意思 我刚才重新描述了一下题目
你说的一二点都没问题,这也是为什么元组 id 相同的原因
我觉得两点叙述可能有些错误,把声明变量改成 给变量赋值新的数据
前者是赋值一个同之前的一个变量的不可变数据相同的值,而 id 却仍相同
后者是赋值一个同之前的一个变量的可变数据相同的值,而 id 始终不同
因为你说声明,应该还有包括这种情况:
a =
b = a
print(id(a),id(b))
b 也是重新声明新的变量,只是赋值了 a 的值,但是 id 还是相同的
页:
[1]