You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何向元组的列表元素添加元素后元组内存大小不变?且tuple7与tuple8内存占用均为80字节?

关于Python元组内存大小的两个疑问解答

1. 为何向元组的列表元素中添加元素后,元组的内存大小并未发生变化?

核心原因在于元组存储的是元素的引用,而非元素本身。

Python里的元组是不可变容器,但这个“不可变”指的是元组本身的元素(也就是指向其他对象的内存地址)不能被修改——你不能把元组里的列表换成另一个列表,也不能替换掉其中的整数。但元组里的可变对象(比如列表)本身是可以修改的,而这种修改并不会改变元组里存储的那个列表的内存地址。

sys.getsizeof()函数测量的是元组对象自身占用的内存,也就是用来存储这些元素引用的空间。当你给元组里的列表追加元素时,列表的内部内容变了,但它的内存地址没变,元组里的引用也没动,所以元组自身的内存大小自然不会发生变化。


2. 为何对tuple8的列表元素执行追加操作后,tuple7与tuple8的内存占用仍均为80字节?

先看你的测试代码:

import sys
tuple7 = (1,2,3,[4,5])
tuple8 = (1,2,3,[4,5])
tuple8[3].append([1,2,3,4,5,6,7,8,9])
print(tuple7, sys.getsizeof(tuple7), "bytes") # 80字节
print(tuple8, sys.getsizeof(tuple8), "bytes") # 80字节

首先,tuple7从创建到结束都没有被修改过,它的内存大小自始至终都是初始化时的80字节,这很好理解。

而tuple8的变化只发生在它引用的列表内部——我们只是给那个列表加了元素,但tuple8本身的元素(三个整数的引用、一个列表的引用)完全没有改变。元组的内存大小只和它包含的元素数量、每个元素引用的大小(64位系统下每个引用占8字节)以及元组自身的头部开销有关。既然tuple8的元素集合没有变,它的内存大小自然和初始化时一样,还是80字节。

简单来说:不管你怎么折腾元组里的可变对象,只要元组自己的元素(那些引用)没被替换,它的内存大小就不会变。


内容的提问来源于stack exchange,提问作者Mohit M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:37:48