Python中的内存管理

6 投票
2 回答
844 浏览
提问于 2025-04-16 21:12

我刚开始学习Python。为了找出一个整数的大小,我使用了sys模块里的getsizeof方法。这个方法返回整数占用24个字节,字符占用34个字节。

>>> sys.getsizeof(1)
24
>>> sys.getsizeof('a')
34

我觉得这个大小(24个字节或34个字节)对于存储一个整数或字符来说太大了……我觉得这样会浪费很多内存。你能帮我理解一下Python中内存管理的概念吗?

2 个回答

2

每次你在Python中定义一个对象时,都会创建一个新的对象,并且这个对象有一个新的身份。

不过,有一些例外情况,比如小整数(在-5到256之间)和一些小字符串(特殊的字符串,通常长度小于20个字符),它们是单例对象,拥有相同的身份(实际上是一个对象有多个指针指向它)。

举个例子:

在[1]: L1 = [1, 2, 3]

在[2]: L2 = [1, 2, 3]

在[3]: id(L1)

输出[3]: 4436443080

在[4]: id(L2)

输出[4]: 4436349576

再举个例子:

在[5]: a = 10

在[6]: b = 10

在[7]: id(a)

输出[7]: 4401921584

在[8]: id(b)

输出[8]: 4401921584

15

因为在Python中,所有东西都是对象,所以每个对象都会有一些额外的开销。以CPython为例,每个对象至少需要存储一个类型指针和一个引用计数。此外,具体的对象还需要一些额外的空间来存放它们的数据。而且,对于某些对象来说,还有垃圾回收的开销。可以肯定的是,没有什么是“浪费”的,这种想法太傻了。

另外,Python里没有char这种类型,像'a'这样的字符其实是一个长度为1的字符串。

撰写回答