提问人:Yogesh 提问时间:1/23/2022 最后编辑:Yogesh 更新时间:1/24/2022 访问量:519
为什么集合不将元组(其中字典是项)作为键?
Why is a set not taking tuple (where dictionary is an item) as a key?
问:
我知道集合键是不可变的,因此像列表这样的数据类型没有资格成为集合中的键。在下面显示的示例中,如果元组内存在字典中,为什么元组不能用作键?有人可以帮我解释一下吗?
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
答:
0赞
Adam.Er8
1/23/2022
#1
如果可能的话,想想这种情况:
is 指的是 dict,它是一个可变的对象。
如果程序中的其他地方有人引用了该词典并对其进行了修改,那么下次使用时,它将具有“不同的值”(例如,将不再属于该集合)。x[1]
x
x = (1, {'a':1})
print(x)
x[1]['a'] = 'BANANA'
print(x)
输出:
(1, {'a': 1})
(1, {'a': 'BANANA'})
评论
0赞
Yogesh
1/23/2022
x 是一个元组,因此是不可变的。其中包含可变项并不会使其可变。stackoverflow.com/questions/9755990/......
0赞
Adam.Er8
1/24/2022
@Yogesh是的,这是真的,总是一样的,改变我的措辞,简单地说明为什么这是一个问题,如果它被允许的话。x[1]
x[1]
0赞
dshin
1/23/2022
#2
只有当 的所有元素都可以用作键时,A 才能用作键。A 不能用作键(因为它是可变的)。tuple
tuple
dict
这里更技术性的答案是,键必须是可散列的,并且只有当它们的各个元素是可散列的时,s 才是可散列的。dict
tuple
评论