【发布时间】:2015-07-08 10:35:27
【问题描述】:
我试图找出列表的切片分配和常规分配之间的性能差异。代码如下:
import time
N = 1000
a = list(range(N))
b = list(range(N))
time1 = time.time()
for i in range(N):
a = [x for x in a if x is not i]
time2 = time.time()
for i in range(N):
b[:] = [x for x in b if x is not i]
time3 = time.time()
print a
print b
print time2 - time1
print time3 - time2
我的期望是,对于每个列表 a 和 b,这将一次删除一个元素,以便 print a 和 print b 都打印空列表。相反,它们似乎总是打印起始列表,但缺少第一个 256 元素。
他们都打印:
[257, 258, 259 ... N-1]
发生了什么?
我使用的是 Python 2.7.6。
【问题讨论】:
-
因为CPython中缓存了小整数,所以使用
!=而不是is操作符。
标签: python list variable-assignment