python的内存管理器_Python元组和内存管理器

您没有创建单个项元组。任何表达式都可以用括号括起来而不改变其含义,因此(1)与{}是一样的。要创建单个元素元组,请编写(1,)。当你这样做时,内存消耗应该变得更加合理。在But how can an integer require 24 bytes? Aren't integers usually 8 bytes at most?

在python3中,所有整数都是任意精度的,甚至在python2中,包括整数在内的所有对象在引用计数、类型信息和其他元数据方面都有一定的开销。对于一个成熟的Python对象来说,24字节实际上是相当合理的。在

(从技术上讲,小整数是被截取的,因此在这种特殊情况下,引用计数可能是不必要的,但是删除它会使解释器的其他部分复杂化,而没有明显的好处。)

在我回答的时候,我还想澄清一些事情:(if tuples store elements as references and not as values - that I don't know)

一般来说,Python不允许Python对象实际包含另一个对象。在C源代码中,您将看到许多PyObject*变量,但没有PyObject变量。Python对象存在于堆中,彼此完全独立。换句话说,是的,元组存储的是引用,而不是实际对象。在My initial thought was that like dictionaries tuples are created in memory with a certain default size that can hold a couple of elements.

没有理由这么做。元组的大小是固定的。从官方角度来说,它们是不变的,在创造之后不会改变。非正式地说,它们可以在C级别进行更改,但是这些更改对于Python代码是不可见的;在创建元组之后,但在将其用于任何事情之前,只需修改一次tuple,之后就不再修改它了。此外,这些更改实际上并不会改变大小,它们只是填充已经存在的数组插槽。在

由于这种不变性,元组没有理由存储比实际更多的元素。它们不需要支持快速附加或其他改变大小的操作。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值