理解 list.__iadd__ 和 list.__add__ 之间的区别
在 Python 中,对象可以定义特殊的“魔法”方法来支持它们的交互与某些运营商。两个这样的方法是 iadd 和 __add__,分别用于就地和常规加法操作。
考虑以下两个代码片段:
<code class="python"># Example 1 x = y = [1, 2, 3, 4] x += [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4, 4] # Example 2 x = y = [1, 2, 3, 4] x = x + [4] print(x) # [1, 2, 3, 4, 4] print(y) # [1, 2, 3, 4]</code>
为什么这样做这两个示例的行为不同?
在这两种情况下,我们都从两个相同的列表 x 和 y 开始,然后使用 x = [4] 或 x = x [4] 执行加法运算。
当使用 x = [4] 时,会调用 Python 的 __iadd__ 方法,该方法执行就地加法。这意味着原始列表 x 已发生变化,并且其内容已使用列表 [4] 中的元素进行更新。结果,x 和 y 现在都包含相同的修改后的列表。
相反,当使用 x = x [4] 时,会调用 Python 的 __add__ 方法,该方法返回一个包含 x 和 y 的元素的新列表和[4]。原始列表 x 保持不变,y 仍然指向初始未修改的列表。
以上是`list.__iadd__` 和 `list.__add__` 之间有什么区别?为什么在 Python 中修改列表时会导致不同的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!