python - 如果元组是可变的,则 python 元组分配
问题描述
我是 python 新手。元组据说是不可变的,但为什么我们可以做这样的事情。即连接并更改原始值
a=(1,2,3)
>>> a
(1, 2, 3)
>>> b=(4,5,6)
>>> b
(4, 5, 6)
>>> a=a+b
>>> a
(1, 2, 3, 4, 5, 6)
在这种情况下,我们不是在更改元组 a 中的值吗?
解决方案
不,您正在创建一个新元组。考虑。
>>> a = (1, 2, 3)
>>> a1 = a
现在a1
和a
是同一个元组。不仅仅是相似的外观;他们是一样的。然后
>>> b = (4, 5, 6)
>>> a = a + b
现在a
是(1, 2, 3, 4, 5, 6)
。我们是否更改了我们创建的第一个元组?让我们问一下Python。
>>> a
(1, 2, 3, 4, 5, 6)
>>> a1
(1, 2, 3)
不,原始元组保持不变。
这种区别很重要。您创建了一个新元组,并且碰巧给它起了相同的名称。这意味着,如果您正在编写一个具有巨大对象层次结构的复杂程序,那么您刚刚所做的更改a
不会破坏任何其他依赖于a
. 它只会破坏您a
控制的特定变量。另一方面,如果我们有一个列表a = [1, 2, 3]
并开始附加到它,那么任何其他碰巧持有对该列表的引用的对象现在都会看到这些变化,这会导致远处出现混乱的错误。
推荐阅读
- angular - 将 webpack 的 `require.context` 与 angular cli 和 ivy 一起使用
- c# - 刚体游戏对象在移动时被限制移动
- c - 为什么使用 n=sizeof(myarray)/sizeof(myarray[0]) 会给出“注释”错误,但为 n 指定数值不会?
- reference - 在 STM32CubeIDE(基于 Eclipse 的 IDE)中添加新的源文件和头文件不能无缝工作
- objective-c - 如何在 Swift 中使用 Objective-C 可视化工具
- c# - 处理单例和静态对象
- prestashop - 使用 smarty 从模板中获取元素 id - Prestahop
- react-admin - 了解 React-Admin 翻译
- yii2 - yii2 swift mail 会变成垃圾邮件
- php - WordPress:使用