【问题标题】:How does memory allocated for different datatype in python?python中如何为不同的数据类型分配内存?
【发布时间】:2023-04-02 13:19:01
【问题描述】:

我注意到,对于整数和字符串:

a=1 ; b=1
c='abc' ; d='abc'
print(id(a), id(b))
print(id(c), id(d))

在这种情况下,a 将与b 共享相同的内存地址,c 将与d 共享相同的内存地址

另一方面,对于列表,设置...等:

e=[1,2,3] ; f=[1,2,3]
g=(1,2,3) ; h=(1,2,3)
i={1,2,3} ; j={1,2,3}
k={"a":1,"b":2} ; l={"a":1,"b":2}
print(id(e), id(f))
print(id(g), id(h))
print(id(i), id(j))
print(id(k), id(l))

在这种情况下,e 不会与f 共享相同的内存地址,g 不会与h 共享相同的内存地址......等等。

所以我想问一下:

  • python为不同的数据类型分配内存有什么原则吗?
  • python官方文档对此有解释吗? (我找不到)

谢谢

【问题讨论】:

  • Python 允许,但不需要,可以重用不可变对象。不要依赖这种行为。 Python 也允许但不要求在其生命周期结束后重用任何对象的内存;不要假设两个生命周期不重叠的对象会有不同的id 值。

标签: python python-3.x memory data-structures memory-management


【解决方案1】:

仅针对整数的部分答案:由于使用频率的原因,Python 缓存然后重用内存中的某些整数值。例如,数字 1-256 以这种方式存储,这就是为什么指向这些值的不同变量将具有相同的 id。较大的数字(例如 257)是动态分配的,尽管是不可变的,但不会共享相同的 id。

例子:

a = 256
b = 256
print(id(a), id(b))

a = 257
b = 257
print(id(a), id(b))

输出:

2038199456 2038199456
21831936 21832816

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2011-05-17
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    相关资源
    最近更新 更多