gpt4 book ai didi

python - 为什么 Python 在已经有 INPLACE_ADD 时发出 STORE_SUBSTR?

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:09 26 4
gpt4 key购买 nike

如果反汇编下面的函数

def test():
t = (1, 2, [30])
t[2] += [40]
return t

您会看到 t[2] += [40] 的相应字节码如下所示:

  3          18 LOAD_FAST                0 (t)
21 LOAD_CONST 2 (2)
24 DUP_TOPX 2
27 BINARY_SUBSCR
28 LOAD_CONST 4 (40)
31 BUILD_LIST 1
34 INPLACE_ADD
35 ROT_THREE
36 STORE_SUBSCR

[40]INPLACE_ADD之后连接到存储在t[2]中的列表,为什么Python决定添加一个STORE_SUBSCR 无论如何?

最佳答案

这是因为 INPLACE_ADD 仅请求在可能的情况下就地完成操作;如果对象是不可变的或者没有费心去实现 __iadd__INPLACE_ADD 就会退回到常规的非就地添加。如果代码是

t = [1, 2, (30)]
t[2] += (40,)

显然有必要将新元组存储回 t[2],因为该操作会生成一个新元组而不是改变旧元组。

关于python - 为什么 Python 在已经有 INPLACE_ADD 时发出 STORE_SUBSTR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31039969/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com