python元组_python – 为什么元组比列表更快?

报告的“构造速度”比率仅适用于恒定元组(其项目由字面量表示)。仔细观察(并在您的机器上重复 – 您只需要在shell /命令窗口中键入命令!)…:

$ python3.1 -mtimeit -s'x,y,z=1,2,3' '[x,y,z]'

1000000 loops, best of 3: 0.379 usec per loop

$ python3.1 -mtimeit '[1,2,3]'

1000000 loops, best of 3: 0.413 usec per loop

$ python3.1 -mtimeit -s'x,y,z=1,2,3' '(x,y,z)'

10000000 loops, best of 3: 0.174 usec per loop

$ python3.1 -mtimeit '(1,2,3)'

10000000 loops, best of 3: 0.0602 usec per loop

$ python2.6 -mtimeit -s'x,y,z=1,2,3' '[x,y,z]'

1000000 loops, best of 3: 0.352 usec per loop

$ python2.6 -mtimeit '[1,2,3]'

1000000 loops, best of 3: 0.358 usec per loop

$ python2.6 -mtimeit -s'x,y,z=1,2,3' '(x,y,z)'

10000000 loops, best of 3: 0.157 usec per loop

$ python2.6 -mtimeit '(1,2,3)'

10000000 loops, best of 3: 0.0527 usec per loop

我没有做3.0的测量,因为我当然没有它 – 它完全过时,并没有绝对没有理由保持它,因为3.1是优于它在任何方式(Python 2.7,如果你可以升级到它,测量在每个任务中比2.6快几乎20% – 和2.6,如你所见,比3.1快 – 所以,如果你认真对待性能,Python 2.7是真正唯一的版本要去!)。

无论如何,这里的关键点是,在每个Python版本中,从常量文字构建一个列表的速度或者稍微慢一点,而不是使用变量引用的值。但元组的行为非常不同 – 从常量文字构建元组通常是由变量引用的值的三倍快!你可能想知道这是怎么回事,对吗? – )

答案:由常量文字组成的元组可以很容易地被Python编译器识别为一个不可变的常量文字本身:因此它基本上只构建一次,当编译器将源代码转换为字节码,并保存在“常量表“的相关功能或模块。当这些字节码执行时,它们只需要恢复预建的常量元组 – hey presto! – )

这种简单的优化不能应用于列表,因为列表是一个可变对象,因此如果相同的表达式[例如[1,2,3])执行两次(在循环中 – timeit模块使循环开启你的代码;-),一个新的新的列表对象每次都被重新构造 – 并且该构造(像编译器不能简单地将其标识为编译时常量和不可变对象的构造一个元组)需要一点时间。

也就是说,元组构造(当两个结构实际上必须发生)仍然是列表构建的两倍快 – 这种差异可以由元组的简单性来解释,其他答案已经反复提到。但是,这种简单性不会导致6倍或更快的加速,因为你观察到如果你只比较列表和元组的构造与简单的常量文字作为他们的项目!_)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在Python中,列表元组更快。这是因为元组是不可变的数据结构,它们的元素不能被修改,添加或删除。而列表是可变的,可以进行修改、添加或删除操作。所以在需要频繁修改数据的情况下,使用列表更快。引用中的代码示例展示了对元组添加元素的错误,而列表则可以使用append方法进行添加。另外,引用中的代码示例展示了如何使用itertools模块将元组列表转换为列表,这在一些场景下非常方便。总的来说,列表更加灵活和易于操作,所以在需要频繁修改数据或进行添加、删除操作的情况下,列表元组更快。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python 元组转换为列表](https://blog.csdn.net/brightgreat/article/details/127791056)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python 修改元组的方法?怎么修改元组?](https://blog.csdn.net/PSpiritV/article/details/123011555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值