Skip to main content
 首页 » 编程设计

python之如果我说 x = x 会发生什么 (在较低的编译器级别)

2025年05月04日14myhome

在 Python(更具体地说是 Python 3.x)中,如果我说 x = x 会发生什么,其中 x 是对可变对象(如 list) 或对底层不可变(如 int)的引用?编译器会忽略这些废话吗?

更具体地说,如果遇到以下情况,编译器会做什么:

class A: 
    def __init__(self): 
        self.a = self.init_a() 
 
    def init_a(self): 
        self.a = some_value 
        """ 
        do stuff with self.a here 
        """ 
        return self.a 

对于那些没有注意到的人,self.a 实际上是通过函数 init_a(self) 分配给它自己的。

我知道上面的 class A 这种情况看起来很愚蠢,但我试图通过在 __init__(self) 函数(在我真正实现的另一个类中)。我只是想知道编译器是否优化了那一步,或者它是否在任何情况下都做了一些操作,即使该语句没有产生任何结果(我猜它被优化掉了,但我想成为当然 - 你永远不会知道)。

请您参考如下方法:

from dis import dis 
 
def foo(): 
    x = 1 
    x = x 
 
dis(foo) 

结果:

  4           0 LOAD_CONST               1 (1) 
              3 STORE_FAST               0 (x) 
 
  5           6 LOAD_FAST                0 (x) 
              9 STORE_FAST               0 (x) 
             12 LOAD_CONST               0 (None) 
             15 RETURN_VALUE  

这表明即使在最微不足道的情况下,x = x 也没有被优化掉(在 CPython 中,这就是 dis 的用途)。