easyboy 发表于 2021-6-6 22:10:27

关于不可变对象和可变对象,申明相同值的两个变量是否使用同一块内存空间?

本帖最后由 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对于可变对象而言,申明新的变量必然会开辟新的内存空间?

Twilight6 发表于 2021-6-6 22:12:54


is 是比较两个对象是否完全相同,或是说内存地址是否相同

你这里创建了两个列表,虽然值都是相同的,但是属于两个不同内存地址的变量

你可以通过 id 函数来判断对象在内存中的地址,例如:

list_1 =
list_2 =

print(id(list_1))
print(id(list_2))

执行结果:
1950096773512
1950096774024

内存地址不相同,所以返回 False

easyboy 发表于 2021-6-6 22:20:10

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了呢

Twilight6 发表于 2021-6-6 22:22:56

easyboy 发表于 2021-6-6 22:20
不好意思 我刚才重新描述了一下题目






你说的一二点都没问题,这也是为什么元组 id 相同的原因

Twilight6 发表于 2021-6-6 22:34:29


我觉得两点叙述可能有些错误,把声明变量改成 给变量赋值新的数据

前者是赋值一个同之前的一个变量的不可变数据相同的值,而 id 却仍相同

后者是赋值一个同之前的一个变量的可变数据相同的值,而 id 始终不同

因为你说声明,应该还有包括这种情况:

a =
b = a
print(id(a),id(b))

b 也是重新声明新的变量,只是赋值了 a 的值,但是 id 还是相同的
页: [1]
查看完整版本: 关于不可变对象和可变对象,申明相同值的两个变量是否使用同一块内存空间?