问题标签 [hashable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
18476 浏览

python - 检查 Python 中的可变性?

考虑这段代码

  1. 可变性在字典的键和值中起什么作用?
  2. 如何确保对一个字典的键或值的更改不会反映在另一个字典中?
  3. 这与dict 键的可散列约束有何关系?
  4. Python 2.x 和 Python 3.x 之间的行为有什么不同吗?

如何检查 Python 中的类型是否可变?

0 投票
1 回答
929 浏览

iphone - 网络连接警告

Tweetie(现在的 Twitter)应用程序弹出网络可达性警告。这也是在 Foursquare 和 Hashable 应用程序中完成的(据我所知)。某处是否有此实现的示例代码?谢谢。

Tweetie 网络连接警告

0 投票
7 回答
16166 浏览

python - 使用带有字典参数的@functools.lru_cache

我有一种将(除其他外)字典作为参数的方法。该方法正在解析字符串,并且字典为某些子字符串提供了替换,因此它不必是可变的。

这个函数经常被调用,并且在冗余元素上被调用,所以我认为缓存它会提高它的效率。

但是,正如您可能已经猜到的那样,因为dict它是可变的,因此不可散列,@functools.lru_cache不能装饰我的函数。那么我该如何克服呢?

如果它只需要标准库类和方法,则可以加分。理想情况下,如果它存在于我从未见过的某种frozendict标准库中,那会让我很开心。

PS:namedtuple仅在最后的手段,因为它需要一个大的语法转变。

0 投票
11 回答
146054 浏览

python - 为什么我不能在 python 中使用列表作为 dict 键?

我对什么可以/不能用作 python dict 的键有点困惑。

所以元组是一种不可变的类型,但是如果我在其中隐藏一个列表,那么它就不能成为键..我不能像在模块中那样轻松地隐藏一个列表吗?

我有一些模糊的想法,即密钥必须是“可散列的”,但我承认我自己对技术细节的无知;我不知道这里到底发生了什么。如果您尝试将列表用作键,而将哈希用作它们的内存位置,会出现什么问题?

0 投票
2 回答
7452 浏览

python - Unable to use a tuple as a dictionary key?

The code is a little complex, sorry. Please focus on the parallel_p function. Although sign is a tuple, Python complains:

if sign in hashtable and gives a TypeError. Why is sign a numpy.ndarray rather than a tuple? I created it as a tuple.

IN TEST MODULE

OUTPUT:

0 投票
4 回答
575 浏览

python - 如何在 Python 中测试“任何深度的不变性”?

我将 Python 对象定义为“在任何深度都不可变”iff

  1. 它(名义上)是不可变的;
  2. 如果它是一个“容器”对象,那么它只包含“在任何深度都不可变”的对象;

例如((1, 2), (3, 4)),在任何深度都是不可变的,而((1, 2), [3, 4])不是(即使后者由于是元组,“名义上”是不可变的)。

是否有合理的方法来测试 Python 对象是否“在任何深度都不可变”?

测试第一个条件相对容易(例如使用collections.Hashable类,并忽略不正确实现方法的可能性__hash__),但第二个条件更难测试,因为“容器”对象的异质性,以及迭代他们的“内容”......

谢谢!

0 投票
3 回答
2098 浏览

python - 使列表子类可散列

我想从中派生一个类list,向它添加一些实例属性,并使其可散列。什么是好的(快速而整洁的)方法?

更新:

我删除了一个用例的冗长解释。我还将一个相关但单独的问题移到了另一个问题中。

0 投票
5 回答
26726 浏览

python - 是什么让用户定义的类不可散列?

文档说,只要定义了__hash__方法和方法,一个类就是可散列的__eq__。然而:

什么使X不可散列?

请注意,我必须有相同的列表(就常规相等而言)才能散列到相同的值;否则,我将违反哈希函数的这一要求:

唯一需要的属性是比较相等的对象具有相同的哈希值

文档确实警告说,在其生命周期内不应修改可散列对象,当然我不会修改X创建后的实例。当然,解释器无论如何都不会检查。

0 投票
2 回答
3532 浏览

python - 自动使类可散列

有几种标准方法可以使类可散列,例如(借用SO):

现在假设我有很多类要设为可散列。它们都是不可变的,具有不可变的属性,并且批量散列所有这些属性是可以接受的(对于具有太多属性的类,我们只想散列几个足以避免大多数冲突的属性)。我可以避免__key()为每个班级手动编写方法吗?

__key()为它们创建一个定义,__eq__和的基类是个好主意__hash__吗?特别是,我不确定找到所有应该进入的实例属性__hash__是否可行。我知道这通常是不可能的,但在这种情况下,我们可以对对象进行更多假设(例如,它是不可变的 -__init__完成后,它的属性都是可散列的,等等)。

(如果继承层次结构不起作用,也许装饰器会起作用?)

0 投票
1 回答
69 浏览

python - 是否有另一种方法可以避免大型可散列对象的重复?

我正在处理文本并且需要存储大量可散列对象 - 有时是字符串,有时是单词元组等。我一直在考虑使用散列函数来提供一个简单的存储和检索类,但我的第一种方法是单个哈希键可能会解析为多个项目。鉴于我添加了一个将 add 的返回值作为参数的 get 函数,我无法知道要返回列表中的哪个项目。

另一种方法最终确保每个唯一的可散列项只有一个映射。

这有效并确保 add 的返回值可用于返回唯一值。只是看起来有点笨拙。有没有更好、更 Pythonic 的方式来处理这种情况?

我对这个问题一直模棱两可。有两个问题 - 一个是我有数百万个对象当前正在使用从 100 到 1000 字节的键(big_hashable 的东西)。将它们转换为整数可以处理比我目前更多的数据。其次,只保留每个 big_hashable 事物的单个规范副本也会减少内存使用量,尽管这是引发我的问题的第一个问题,因为每个键实际上都是 big_hashable 事物的单独副本。