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

时间:2019-03-22 21:10:39

标签: python memory

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

作为引用对象的变量,这是否意味着如果两次引用同一对象,就不会创建两次?

我试图获得__sizeof__(),但不确定自己该如何学习。

a = "string"
b = a 

现在在__sizeof__()引用的字符串上调用a方法将在Jupyter笔记本中输出55个字节。 B显然会这样做,因为它引用了相同的对象。

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


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

对象可以分别是==is检查1)值相等或2)对象id 相等。对于相等的值,两个引用可能指向相同的对象或两个不同的对象(相等的值)。对于相等的对象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)

1 个答案:

答案 0 :(得分:0)

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