【问题标题】:How does variable swapping work internally?变量交换如何在内部工作?
【发布时间】:2011-12-21 08:59:31
【问题描述】:

简单而简短的问题。在 Python 中交换两个变量非常简单:a, b = b, a。没关系,我没有异议 :) 但我对它在内部的工作方式很感兴趣?它会自己创建一些临时变量还是更有趣(我敢打赌)?

【问题讨论】:

    标签: python


    【解决方案1】:

    Python 源代码在执行前转换为bytecode。您可以通过使用反汇编程序dis 来查看交换在内部是如何工作的,以查看字节码的样子:

    import dis
    >>> def f(a,b): a, b = b, a
    >>> dis.dis(f)
      1           0 LOAD_FAST                1 (b)
                  3 LOAD_FAST                0 (a)
                  6 ROT_TWO             
                  7 STORE_FAST               0 (a)
                 10 STORE_FAST               1 (b)
                 13 LOAD_CONST               0 (None)
                 16 RETURN_VALUE 
    

    简单来说,它将 a 和 b 的值压入堆栈,旋转(交换)顶部两个元素,然后再次弹出值。

    另见:

    【讨论】:

    • 太棒了。我错误地认为,当我们在两个或多个表达式之间使用, 时,Python 会将它们打包成一个(此处为 temporary)“元组”。也许这里不是这种情况,因为在左侧正好有这两个ab。这就是说明中没有BUILD_TUPLE的原因吗?
    猜你喜欢
    • 2010-09-19
    • 2023-02-05
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2014-01-04
    相关资源
    最近更新 更多