python 中如何为不同的数据类型分配内存?
How does memory allocated for different datatype in python?
我注意到,对于整数和字符串:
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缓存然后在内存中重复使用某些整数值。例如,数字 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
我注意到,对于整数和字符串:
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缓存然后在内存中重复使用某些整数值。例如,数字 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