当您运行以下代码时,追加时间会随着时间的推移而延长10倍。为什么追加大字符串时,Python中的追加操作会变慢?
from datetime import datetime
test = []
for i in range(30000):
time_before_append = datetime.now()
test.append("testeafda" * 100000)
time_after_append = datetime.now()
print(time_after_append - time_before_append)
我知道append一般是O(1)。这是否涉及垃圾回收,调整大小的列表,内存使用情况和/或其他内容?试图了解Python的内部工作原理。
这就像30千兆字节的字符串,你在那里建立。你甚至有30千兆字节的RAM? – user2357112
您正在一个循环中添加1 MB数据30k次,您想知道为什么它很慢?另外,由于字符串是不可变的,所以''testeafda“* 100000'将不得不重建字符串100,000次。如果您在循环之外预定义该字符串并将其附加到列表中,而不是重新构建每个迭代,则会立即加速。 – blakev