python中字典的键是唯一的吗_Python中字典的key都可以是什么.pdfVIP

python中字典的键是唯一的吗_Python中字典的key都可以是什么.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
python中字典的键是唯⼀的吗_Python中字典的key都可以是什 么 作者:Inotime 来源:CSDN 答:⼀个对象能不能作为字典的key,就取决于其有没有__hash__⽅法。所以所有python⾃带类型中,除了list、dict、set和内部⾄少带有 上述三种类型之⼀的tuple之外,其余的对象都能当key。 ⽐如数值/字符串/完全不可变的元祖/函数(内建或⾃定义)/类(内建或⾃定义)/⽅法/包等等你能拿出⼿的,不过有的实际意义不⾼。还有数 值型要注意,因为两个不同的相等数字可以有相同的哈希值,⽐如1和1.0。 解释: 代码版本:3.6.3;⽂档版本:3.6.6 Unlike sequences, which are indexed by a range of numbers, dictionaries are indexed by keys, which can be any immutable type; strings and numbers can always be keys. Tuples can be used as keys if they contain only strings, numbers, or tuples; if a tuple contains any mutable object either directly or indirectly, it cannot be used as a key. You can’t use lists as keys, since lists can be modified in place using index assignments, slice assignments, or methods like append()and extend(). 字典的键可以是任意不可变类型,需要注意的是tuple元组作为键时,其中不能以任何⽅式包含可变对象。 那。。到底什么样的是不可变类型呢?不可能给对象专门标注⼀个属性是可变类型还是不可变类型啊,这没有任何其他意义,⼀定是通过其 他途径实现的。把list当做键试⼀下 a = [1, 2, 3] d = {a: a} # 第⼆⾏报错 : # TypeError: unhashable type: 'list' 报错说list类型是不可哈希的,噢,原来是靠能不能hash来判断的,另外⽂档下⾯接着说同⼀字典中每个键都是唯⼀的,正好每个对象的哈 希值也是唯⼀的,对应的很好。 It is best to think of a dictionary as an unordered set of key: value pairs, with the requirement that the keys are unique (within one dictionary). 查看源代码可以看到object对象是定义了__hash__⽅法的, ⽽list、set和dict都把__hash__赋值为None了 # 部分源码 class object: """ The most base type """ def __hash__(self, *args, **kwargs): # real signature unknown """ Return hash(self). """ pass class list(object): __hash__ = None class set(object): __hash__ = None class dict(object): __hash__ = None 那这样的话。。。我给他加⼀个hash不就能当字典的key了,key不就是可变的了。注意:此处只是我跟着想法随便试,真的应⽤场景不要 ⽤可变类型作为字典的key。 class MyList(list): """⽐普通的list多⼀个__hash__⽅法""" def __hash__(self): # 不能返回hash(self) # hash(self)会调⽤self的本⽅法,再调⽤回去,那就没完了(RecursionError) # ⽤的时候要注意实例中⾄少有⼀个元素,不然0怎么取(IndexError) return hash(self[0]) l1 = MyList([1, 2]) # print(l1) -> [1, 2] d = {l1: 'Can?'} print(d) # --> {[1, 2]: 'Can

您可能关注的文档

文档评论(0)

166****9181 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

认证主体朱**

1亿VIP精品文档

相关文档

相关课程推荐