Python 元组内存分配与普通变量内存分配的区别
在上述情况下,a和b的内存位置不同Python 元组内存分配与普通变量内存分配的区别,python,memory,memory-management,Python,Memory,Memory Management,在上述情况下,a和b的内存位置不同 >>> a = 300 >>> b = 300 >>> id(a) 34709776 >>> id(b) 34709824 但当使用元组分配时,a和b的内存位置都是相同的。为什么?这是我为aa,b=300300得到的: >>> (a, b) = 300, 300 >>> id(a) 34709632 >>> id(b) 3470963
>>> a = 300
>>> b = 300
>>> id(a)
34709776
>>> id(b)
34709824
但当使用元组分配时,a和b的内存位置都是相同的。为什么?这是我为a
a,b=300300得到的:
>>> (a, b) = 300, 300
>>> id(a)
34709632
>>> id(b)
34709632
对于正常<代码>a=300;b=300
Python使用两个独立的LOAD_CONST
,我猜这是对这种赋值的某种优化。因为-5-256是最常用的数字。在(a,b)=300300
中,您将看到使用多重分配重用对象的窥视孔优化a,b=300300
也会这样做,实习是有成本的,所以对每个数字都这样做是不实际的。谢谢@padraiccnningham我对内存分配有了明确的认识,但是字符串对象缓存呢?在第一行和第二行,什么是2,是加载和解包两个常量吗。。?
2 0 LOAD_CONST 2 ((300, 300))
3 UNPACK_SEQUENCE 2
6 STORE_FAST 0 (a)
9 STORE_FAST 1 (b)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE