Python中不同数据类型如何分配内存?

问题描述 投票:0回答:2

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

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-3.x memory data-structures memory-management
2个回答
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

0
投票

Python 解释器有不同的方式来处理这个概念。然后在 VScode 或任何其他编辑器中测试上述概念 x = 12345678 y = 12345678

打印(x 是 y) 这将返回 True 作为结果 Click here to see the concept

© www.soinside.com 2019 - 2024. All rights reserved.