【发布时间】:2018-06-16 13:32:12
【问题描述】:
我的代码如下所示:
class SomeClass(str):
pass
some_dict = {'s':42}
>>> type(some_dict.keys()[0])
str
>>> s = SomeClass('s')
>>> some_dict[s] = 40
>>> some_dict # expected: Two different keys-value pairs
{'s': 40}
>>> type(some_dict.keys()[0])
str
为什么 Python 在更新字典 some_dict 时将对象 s 转换为字符串“s”?
【问题讨论】:
-
要问自己的问题是,“为什么这些实例的哈希值相同?”
-
... 因为
s是一个值为"s"的字符串? -
@Satwik - 正是:-)
-
不过这是个好问题。
-
@Satwik “散列值”并非一无所知。它们等于对象的
__hash__方法返回的任何值。通过继承str而不是实现__hash__本身,SomeClass的行为与str完全相同,因此hash('s')和hash(SomeClass('s'))返回完全相同的值。class A(str): pass ; print(hash('s') == hash(A('s'))) ; True
标签: python class dictionary