【发布时间】:2014-01-19 00:41:05
【问题描述】:
我希望有人能解释为什么搜索对象引用列表比搜索普通列表要慢得多。这是使用python“in”关键字来搜索我认为以“C编译器”速度运行的。我认为列表只是对象引用(指针)的数组,因此搜索应该非常快。这两个列表在内存中都是 412236 字节。
普通列表(搜索需要 0.000 秒):
alist = ['a' for x in range(100000)]
if 'b' in alist:
print("Found")
对象引用列表(搜索需要 0.469 !! 秒):
class Spam:
pass
spamlist = [Spam() for x in range(100000)]
if Spam() in spamlist:
print("Found")
编辑:所以显然这与旧式类的开销比新式类更多有关。我的脚本只有 400 个对象,现在可以轻松地处理多达 10000 个对象,只需让我的所有类都继承自“对象”类。就在我以为我知道 Python 的时候!。
我以前读过关于新样式与旧样式的文章,但从未提到旧样式类可以比新样式类慢 100 倍。在对象实例列表中搜索特定实例的最佳方法是什么?
1. 继续使用“in”语句,但要确保所有类都是新样式。
2. 使用“is”语句执行一些其他类型的搜索,例如:
[obj for obj in spamlist if obj is target]
3。其他更 Pythonic 的方式?
【问题讨论】:
-
您使用的是哪个 Python 版本?
标签: python list search python-2.7