gpt4 book ai didi

python - 具有共享对象引用的两个变量的总大小是多少?

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:28 25 4
gpt4 key购买 nike

在Python中,如果两个变量引用同一个对象,总大小(内存分配)是加倍还是总大小只是对象的大小?

由于变量引用对象,这是否意味着同一个对象被引用两次就不会创建两次?

我试图获取__sizeof__()但我不确定我自己应该如何研究这个。

a = "string"
b = a

现在调用__sizeof__() a 引用的字符串上的方法将在 Jupyter Notebook 中输出 55​​ 个字节。 B 显然也会做同样的事情,因为它引用了同一个对象。

但是这里使用的对象的总大小是对象“字符串”大小的 1 倍还是 2 倍?我不太相信 .py 或 .ipynb 的文件大小能否得到准确的答案。

<小时/>

编辑: when does Python allocate new memory for identical strings?仅寻址字符串。这个问题的答案部分取决于对象的类型(尤其是小整数)。

对象可以分别为 1) 值相等 或 2) 对象 ID 相等 ==is检查。对于值相等,两个引用可能指向同一个对象或两个不同的对象(值相等)。对于对象id相等,两个引用只指向一个对象。

在第一种情况下,总大小是两个引用+一个或两个对象,具体取决于实现。对于第二种情况,只有两个引用和一个对象。

对于小整数(和小字符串),Python 会自动缓存它们,因此即使完成了两个对象分配,它们也始终共享引用。两者==is将评估为 True .

相同的值,相同的对象:

S1 = 'string'
S2 = 'string'
S1 == S2, S1 is S2
#Out: (True, True)

相同的值,不同的对象:

S1 = 'a longer string'
S2 = 'a longer string'
S1 == S2, S1 is S2
#Out: (True, False)

最佳答案

都不是,尽管 1x 更接近。总大小是目标对象(您的字符串)加上两个引用(一个地址引用 - 通常是一个存储字 - 每个)的总和。您有 ab 以及它们引用的字符串。

关于python - 具有共享对象引用的两个变量的总大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55307817/

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