【问题标题】:difference between tuple memory allocation and normal variable memory allocation元组内存分配和普通变量内存分配的区别
【发布时间】:2015-07-01 17:08:45
【问题描述】:
>>> a = 300
>>> b = 300
>>> id(a)
34709776
>>> id(b)
34709824

在上述情况下,a 和 b 内存位置不同

>>> (a, b) = 300, 300
>>> id(a)
34709632
>>> id(b)
34709632

但是当使用元组进行分配时,a&b 的内存位置是相同的。为什么?

【问题讨论】:

  • 因为 -5 - 256 是最常用的数字。在(a, b) = 300, 300 中,您会看到窥视孔优化,其中使用多个分配重用对象。 a, b = 300, 300 也会这样做,实习是有成本的,所以对每个号码都这样做是不切实际的
  • 感谢@PadraicCunningham 我清楚了内存分配,但是字符串对象缓存呢?

标签: python memory memory-management


【解决方案1】:

这是我得到的a, b = 300, 300

  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

至于普通的a = 300; b = 300 Python 使用两个独立的LOAD_CONST,我猜这是对这种赋值的某种优化。

【讨论】:

  • 第一行和第二行,什么是2,是加载和解压两个常量吗..?
猜你喜欢
  • 2012-01-13
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多