关于 类 和赋值的 Python 执行时间

Execution time in Python regarding classes and assigning values

我尝试了有关更改变量值的不同方式的方法,并遇到了一些我没想到的事情。我原以为改变值本身,而不是将新的 class 分配给变量会更快。谁能给我解释一下为什么 A 比 B 快?

from time import time

class A:
    def __init__(self):
        self.a = 0

    def __add__(self, other):
        return self.a + other

    def __str__(self):
        return str(self.a)

class B:
    def __init__(self):
        self.b = 0

    def __add__(self, other):
        self.b += other

    def __str__(self):
        return str(self.b)


a = A()
b = B()

s =  time()
for _ in range(10**6):
    a = a + 1
print(a, time()-s, " seconds")

s =  time()
for _ in range(10**6):
    b + 1
print(b, time()-s, " seconds")

输出:

1000000 0.12671232223510742  seconds
1000000 0.2434854507446289  seconds

编辑:添加代码。

s =  time()
for i in range(10**6):
    a = a + i
print(a, time()-s, " seconds")

s =  time()
for i in range(10**6):
    b + i
print(b, time()-s, " seconds")

输出:

499999500000 0.15620923042297363  seconds
499999500000 0.2812356948852539  seconds

我不确定您的代码是否按您的预期运行。方法 A._add_ 仅使用参数整数 1 调用一次。在将此 1 分配给变量 a 之后,从这一刻起,循环中只会添加整数。

如果我们更改代码以便在每次迭代中调用该方法,我们将获得几乎相同的时间。

s =  time()
acc = 0
for _ in range(10**6):
    acc += a + 1
print(acc, time()-s, " seconds")

s =  time()
for _ in range(10**6):
    b + 1
print(b, time()-s, " seconds")

结果:

1000000 0.14543867111206055  seconds
1000000 0.14631319046020508  seconds