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

Python中包含可变元素的元组如何在内存中存储?

元组包含可变元素时的内存存储机制

首先明确核心点:Python里的元组,不管元素是可变还是不可变,存储的都是对象引用,而非直接存储值。

元组的“不可变”到底指什么?

元组的不可变,是指它自身维护的那组引用的集合不可变——你不能修改元组里的引用指向,比如不能执行t[2] = [4]这种替换操作。但如果某个引用指向的是可变对象(比如列表、字典),你完全可以修改这个可变对象的内部状态,就像你代码里做的那样:

t = (1,2,[])
t[2].append(3)  # 修改的是列表对象本身,不是元组里的引用
print(t)
# (1, 2, [3])

这时候元组里的第三个引用还是指向原来的列表对象,只是这个列表的内容变了,所以元组本身的内存结构并没有被破坏,依然符合“不可变”的定义。

连续内存块的作用

元组的引用确实会被存储在连续的内存块中,这也是元组效率高的原因之一。但要注意:这些引用指向的实际对象(比如列表),它们的内存位置可以是分散的。比如你的例子里,元组的连续内存块里存了三个引用:

  • 指向整数对象1的引用
  • 指向整数对象2的引用
  • 指向空列表对象的引用

当你给列表添加元素时,列表对象自己的内存空间会扩容,但元组里的那个引用始终没变,所以元组的连续内存块内容完全没动。

不存在“存储引用还是值”的选择

Python里所有对象都是通过引用存储的,没有例外。像整数、字符串这类不可变对象,你感觉像是“存值”,只是因为这些对象本身不能被修改,所以引用指向的内容不会变,看起来和直接存值效果一样,但本质上还是存的引用。

内容的提问来源于stack exchange,提问作者Dharmesh Kakadia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:20:27