具有相同值的多个不可变对象是否指向内存中的单个对象?

2024-05-18 17:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

假设a=1000000000和b=1000000000,即ab具有相同的值

当我打印abid()时,无论我运行代码多少次,它始终保持不变

此外,它对于浮点、字符串、布尔和元组保持不变,但对于列表、集合和字典不保持不变

这是否意味着当多个变量(不可变类型)具有完全相同的值时,它总是指向内存中的单个对象,因此ais b将始终返回True,而具有相同值的多个可变类型变量指向内存中的唯一对象,因此ais b将始终返回False


Tags: 对象内存字符串代码idfalsetrue类型
1条回答
网友
1楼 · 发布于 2024-05-18 17:41:49
...it always point...

一般来说是的,但不能保证。它是Python内部优化的一种形式,称为类型紧排

对于不可变的,您应该将其视为无关紧要的东西,对于语言用户来说是透明的。如果对象具有无法更改的值,则无论您正在读取该类型(以及具有该值的)对象的哪个实例。这就是为什么你只能接受一个

至于元组,请注意,包含的对象可以更改,只有元组不能更改(即,更改其元素的数量)

因此,对于不可变项,您不必担心

对于可变表,您应该小心,不要使用Python内部优化,而是使用您编写的代码。因为可以有许多名称引用同一个实例(现在可以通过这些引用中的任何一个进行更改),并且一个更改将反映在所有实例中。这在将可变项作为参数传递时更为棘手,因为遥远的代码可以更改对象(传递的是对象引用的副本,而不是对象本身的副本)

使用可变项管理事物是您的职责。您可以创建具有相同值(副本)的新实例或共享对象。您甚至可以将副本作为参数传递,以保护自己免受调用的意外副作用

相关问题 更多 >

    热门问题