Python 元组内存分配与普通变量内存分配的区别

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和b的内存位置不同

>>> 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