散列表Python中的元组与数组

Joh*_*nGa 2 python

我听说元组元素占用空间不足但无法修改,因此在执行时间方面最佳解决方案是什么:

hash = {}
hash['foo'] = [34,'foobar',[55,90]]
hash['foo'][0] = hash['foo'][0] + 17
Run Code Online (Sandbox Code Playgroud)

要么

hash = {}
hash['foo'] = (34,'foobar',[55,90])
hash['foo'] = (hash['foo'][0] + 17,hash['foo'][1],hash['foo'][2])
Run Code Online (Sandbox Code Playgroud)

use*_*312 6

首先,不要拨打字典hash.它会影响内置哈希.

在这两种情况下,如果删除最后一行然后对代码计时,则值为:

0.545173168182    # list
0.479876995087    # tuple
Run Code Online (Sandbox Code Playgroud)

这是预期的行为.因为创建a tuple比创建列表更快.

$ python -mtimeit 'l=[]'
10000000 loops, best of 3: 0.053 usec per loop
$ python -mtimeit 't=()'
10000000 loops, best of 3: 0.026 usec per loop
Run Code Online (Sandbox Code Playgroud)

但在你的情况下,采取第三行.您创建一个新foo密钥,因为您无法修改tuple,因此它将比list示例花费更多时间.

0.911674976349  # list
1.1165189743    # tuple
Run Code Online (Sandbox Code Playgroud)

另一个注意事项,时差是微观优化.鉴于差异很小,你不应该担心它们.