gpt4 book ai didi

python原子数据类型

转载 作者:太空狗 更新时间:2023-10-30 02:41:34 25 4
gpt4 key购买 nike

它写成here Python 同时具有原子和引用对象类型。原子对象是:int、long、complex。分配原子对象时,它的值被复制,当分配引用对象时,它的引用被复制。

我的问题是:那么,为什么当我执行下面的代码时得到“True”?

a = 1234
b = a
print id(a) == id(b)

在我看来,我不复制值,我只复制引用,不管它是什么类型。

最佳答案

Python 中的赋值(绑定(bind))从不复制数据。它总是复制对绑定(bind)值的引用。

解释器计算右侧的值,左侧通过引用绑定(bind)到新值。如果右侧的表达式是现有值(换句话说,如果不需要运算符来计算其值),则左侧将是对同一对象的引用。

之后

a = b

被执行,

a is b

将永远为真——这就是 Python 中赋值的工作方式。对于容器也是如此,因此 x[i].some_attribute = y 将使 x[i].some_attribute is y 为真。

关于 Python 具有原子类型和引用类型的断言对我来说似乎没有帮助,如果不是完全不正确的话。我会说它有原子类型和容器类型。容器是诸如列表、元组、字典和具有私有(private)属性(初步近似)的实例之类的东西。

正如@BallPointPen 在他们的评论中有益地指出的那样,可以更改可变值而无需重新绑定(bind)引用。由于无法更改不可变值,因此必须重新绑定(bind)引用才能引用不同的值。

编辑:最近阅读the English versionthe quoted page (恐怕我不懂俄语)我看到“Python 使用动态类型,以及引用计数和循环检测垃圾收集器的组合来进行内存管理。”俄语页面有可能将其错误翻译以给人一种错误的语言印象,或者它被 OP 误解了。但是 Python 没有“引用类型”,除了在最特殊的意义上 weakrefs和类似的结构。

关于python原子数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39125486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com