我试验Counter.__iadd__并Counter.update累积了 10,000 个计数器,结果证明__iadd__需要 1.8 秒才能完成,而update只需要 36 毫秒。
我想知道为什么__iadd__要花这么多时间。我猜它首先创建一个新对象并将该对象复制到自身。但它为什么要这样做呢?不是到位了吗?我不知道为什么它不使用与update.
这是我在 IPython 中的实验:
[ins] In [11]: def update():
...: a = Counter()
...: for i in range(10000):
...: a.update(Counter([i]))
...:
...: %time update()
CPU times: user 36 ms, sys: 0 ns, total: 36 ms
Wall time: 33.3 ms
[nav] In [12]: def iadd():
...: a = Counter()
...: for i in range(10000):
...: a.__iadd__(Counter([i]))
...:
...: %time iadd()
CPU times: user 1.8 s, sys: 0 ns, total: 1.8 s
Wall time: 1.8 s
泛舟湖上清波郎朗
相关分类