内存中“+=”运算符和字符串连接的区别?

问题描述

在我读过的一本书中,我了解到标准字符串连接可能会占用大量内存,因为它每次都会复制字符串本身并添加新值。

message = message + chr(codeNum)

我想知道它是否与 += 运算符相同。

message += chr(codeNum)

我在其他语言上看到了一些类似的主题,但我的问题主要是关于 Python。你能提供一些这方面的知识吗?

解决方法

在python中是的, 消息 = 消息 + chr(codeNum) 和 消息 += chr(codeNum) 是一样的。 基本上 += 运算符所做的是将 LHS 和 RHS 相加并将值存储在 LHS 中。 希望它澄清了您的疑问。

,

您可以通过使用 timeit 模块来解决这个问题,它们看起来确实是等效的方法:

>>> s = timeit.Timer(stmt="s1 = 'str1';s2 = 'str2';s1 = s1 + s2")
>>> s.timeit()
0.04924579999999423

>>> s3 = timeit.Timer(stmt="s1 = 'str1';s2 = 'str2';s1 += s2")
>>> s3.timeit()
0.0429421999999704
,

没有区别。这可以通过简单的基准测试来证明。

1000000 次迭代中的 50 次调用。

import timeit
if __name__ == '__main__':
    for i in range(50):
        print(timeit.timeit(stmt='msg = msg + chr(33)',setup='msg=""'))

平均。 0.1719

import timeit
if __name__ == '__main__':
    for i in range(50):
        print(timeit.timeit(stmt='msg += char(33)',setup='msg=""'))

平均。 0.1748