字典是否有键长度限制?

30

我想知道Python中字典键的长度是否有限制。

为了澄清,我不是在说键的数量,而是每个单独键的长度。我将根据动态值(经过验证后)构建我的字典,但我不确定在这种情况下是否应该考虑长度。


4
我认为只要键是可哈希的,你就不应该遇到麻烦。 - Paulo Bu
当你说“长度”时,你是指字符串的长度吗?因为你可以有非字符串键,所以用内存大小来提问可能更好。 - wnnmaw
在这个例子中,我指的是字符串长度。我知道你可以有非字符串键,但我认为限制可能是可比较的。 - pferate
3个回答

24

关于字典键,Python没有任何限制。由于Python中的数值类型也具有任意精度,因此您遇到的唯一限制是可用内存大小,无论是字符串还是其他类型。您可以在这里查看有关Python 2中最大字符串长度的讨论。


22

这是一段示例代码:

from string import ascii_letters
from random import choice

def make_str(length):
    return "".join(choice(ascii_letters) for i in range(length))

test_dict = {make_str(10000000): i for i in range(5)}

结论: Python可以很愉快地使用一个1000万字符的字符串作为字典键。


1
据我所知,没有限制,但需要考虑关键字越长,创建/访问关键字所需的时间就越长。

如果您已经在内存中拥有该对象,则将其引用存储在字典中不会增加太多开销。而且,对键进行哈希可能并不取决于其大小。 - jonrsharpe
我主要在我的字典中使用字符串键,并且我发现当超过30-40个字符时,性能会稍微降低。 - AlexF
@AlexF 从我的经验来看,可能是因为等号检查需要保护哈希冲突,而长字符串的等号检查成本更高。 - l4mpi
@l4mpi 是的,这基本上是我想到的相同想法,但并没有回答我为什么即使访问速度较慢。结果是,当可能时,我尝试将大型字典的最大长度限制为30个字符。 - AlexF
@AlexF 我说的是“可能”,字符串哈希确实涉及到字符串的长度,请参见http://effbot.org/zone/python-hash.htm。 - jonrsharpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接