为什么我们可以在元组中更改字典值?

时间:2015-12-31 04:40:30

标签: python python-2.7 tuples immutability

我正在学习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 个答案:

答案 0 :(得分:2)

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

因此,不要将你的元组视为一个dicts元组,而是将其视为一个对某些事物的引用的元组,其中那些东西是dicts 。情况并非如此,那些dicts in 元组。它们独立存在,元组的元素引用给它们。

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

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

  

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

他们不是一成不变的。元组是。

答案 1 :(得分:1)

你的元组只有一个dict的引用,它无法跟踪你对它里面的东西所做的任何改变(怎么会这样?)。

通过不变性,它了解到你无法做到这一点:

test_tup[0] = {}

这是更改元组所持有的引用