2015-12-31 59 views
2

我正在学习python,并且对元组有困惑。如果元组中的元素是不可变的,那我该如何更改一个元组中存在的字典值?为什么我们可以更改元组内的字典值?

E.g.

test_dict = {'a':2,'b':3} 

test_tup = (test_dict,3) 

test_tup[0]['b'] = 4 

如果我打印test_tup,然后b值更新为4:提前

>>> test_tup 
({'a': 3, 'b': 4}, 3) 

感谢。

回答

2

请记住,python中的每个值都是对对象的引用。

因此,而不是想着你的元组为类型的字典的元组,例如,把它当做至出头,在那些出头的类型的字典引用的元组。情况并非如此,元组内的。它们自己存在,并且元组的元素参考给他们。

现在,考虑这种方式,元组是不可变的。您无法更改其结构/大小,也无法更改其元素,这意味着您无法用一个参考替换另一个参考。

但是,被引用的对象可以是可变的。无论是否被元组引用,它们都是独立存在的。

如果元组中的元素是不可变的,那我怎么能改变它们呢?

它们不是不可变的。元组是。

1

你的元组只包含对字典的引用,它不能跟踪你对其中的东西所做的任何修改(它会怎样?)。

通过更改的,它明白,你不能做到这一点:

test_tup[0] = {} 

这是改变基准的元组成立。

+0

这意味着您可以更改字典中某个键的值,但不能将字典本身更改为空字典。 – uniXVanXcel

相关问题