gpt4 book ai didi

python - 为什么切片对象在 python 中不可散列

转载 作者:太空狗 更新时间:2023-10-29 20:43:38 27 4
gpt4 key购买 nike

为什么 python 中的切片对象不可哈希:

>>> s = slice(0, 10)
>>> hash(s)
TypeError Traceback (most recent call last)
<ipython-input-10-bdf9773a0874> in <module>()
----> 1 hash(s)

TypeError: unhashable type

它们似乎是不可变的:

>>> s.start = 5
TypeError Traceback (most recent call last)
<ipython-input-11-6710992d7b6d> in <module>()
----> 1 s.start = 5

TypeError: readonly attribute

上下文,我想制作一个字典,将 python 整数或切片对象映射到某些值,如下所示:

class Foo:
def __init__(self):
self.cache = {}
def __getitem__(self, idx):
if idx in self.cache:
return self.cache[idx]
else:
r = random.random()
self.cache[idx] = r
return r

作为解决方法,我需要特殊情况切片:

class Foo:
def __init__(self):
self.cache = {}
def __getitem__(self, idx):
if isinstance(idx, slice):
idx = ("slice", idx.start, idx.stop, idx.step)
if idx in self.cache:
return self.cache[idx]
else:
r = random.random()
self.cache[idx] = r
return r

这没什么大不了的,我只是想知道这背后是否有一些原因。

最佳答案

来自Python bug tracker :

Patch # 408326 was designed to make assignment to d[:] an error where d is a dictionary. See discussion starting at http://mail.python.org/pipermail/python-list/2001-March/072078.html .

切片被专门设置为不可散列,因此如果您尝试切片分配给字典,您会收到错误消息。

不幸的是,邮件列表存档链接似乎不稳定。引用中的链接已失效,alternate link I suggested using也死了我能指出的最好的是 that entire month of messages 的存档链接;您可以按 Ctrl-F 组合 { 来查找相关的(以及一些误报)。

关于python - 为什么切片对象在 python 中不可散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29980786/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com