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

如何以非常规方式修改Python元组中的底层整数?

嘿,这事儿挺有意思的——纯技术探索的角度来唠唠Python元组的不可变性,以及怎么“钻空子”修改元组里的整数!

先聊聊常规情况:元组为啥不能直接改

咱们先看这段代码,完全符合预期:

>>> my_immutable = (1, 2)
>>> my_immutable[0] += 1
TypeError: 'tuple' object does not support item assignment

这是因为Python里的元组本身是不可变容器,而里面的int对象也是不可变类型——和C语言直接修改内存里的数值不同,Python执行x += 1的时候,根本不会修改原来的int对象,而是创建一个全新的int实例,咱们用id()就能验证:

>>> x = 1
>>> id(x)
33156200
>>> x += 1
>>> id(x)
33156176

看到没?x已经指向了一个新的内存地址,原来的1还在内存里,只是x不再引用它了。而元组不允许你把新的int对象替换掉原来的位置,所以直接赋值会报错。

非常规操作:硬改元组里的整数

那要是非得修改元组里的底层整数呢?确实有一些“野路子”,比如直接调用Python的C API来绕过元组的不可变性限制。举个用ctypes实现的例子:

import ctypes

# 先定义元组
my_tuple = (1, 2)

# 调用Python的C API函数PyTuple_SetItem
ctypes.pythonapi.PyTuple_SetItem.argtypes = [ctypes.py_object, ctypes.c_ssize_t, ctypes.py_object]
ctypes.pythonapi.PyTuple_SetItem(my_tuple, 0, 3)

print(my_tuple)  # 输出 (3, 2)

不过得严肃提醒一句:这种操作极度危险!Python的很多机制都依赖元组的不可变性(比如用元组当字典的键、缓存哈希值等),强行修改会打破内存安全,导致各种不可预测的bug,生产环境绝对不能用,纯当技术玩玩就行。

内容的提问来源于stack exchange,提问作者Andrei Cioara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:12:09