【问题标题】:Why is a set not taking tuple (where dictionary is an item) as a key?为什么一个集合不以元组(字典是一个项目)作为键?
【发布时间】:2022-01-23 13:19:54
【问题描述】:

我了解集合键是不可变的,因此列表等数据类型不符合成为集合中的键的条件。在下面显示的示例中,如果元组中存在字典,为什么元组不能用作键?有人可以帮我解释一下吗?

x= (1,{'a':1})
y= (1,2)
print(type(x),type(y))

# piece of code which is not giving me an error is below
set1 = {x,'INDIA'}

# set 2 can be created in similar manner without an error
set2 = {y,'INDIA'}

set2

【问题讨论】:

  • 集合中的所有项目都必须是可散列的,而字典不是(它们的元组也不是)。

标签: python dictionary set tuples mutable


【解决方案1】:

如果tuple 的所有元素都可以用作键,则tuple 只能用作键。 dict 不能用作键(因为它是可变的)。

这里更技术性的答案是 dict 键必须是可散列的,而 tuples 只有在其各个元素可散列时才可散列。

【讨论】:

    【解决方案2】:

    如果可能的话,想想这种情况:
    x[1] 是指字典,它是一个可变对象。
    如果在你程序的其他地方有人持有对该 dict 的引用并对其进行修改,那么下次你将使用 x 时,它将具有“不同的值”(例如,将不再属于该集合)。

    x = (1, {'a':1})
    print(x)
    x[1]['a'] = 'BANANA'
    print(x)
    

    输出:

    (1, {'a': 1})
    (1, {'a': 'BANANA'})
    

    【讨论】:

    • x 是一个元组,因此是不可变的。有一个可变项不会使其可变。stackoverflow.com/questions/9755990/…
    • @Yogesh 是的,这是真的,x[1] 总是相同的x[1],改变我的措辞只是为了说明如果允许这是一个问题。
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多