如果可能,python重用列表吗?

Joe*_*ult 4 python

我的意思是,如果你覆盖一个具有相同形状列表的列表,它是否保留第一个列表?例如:

point = [1, 2]
for x in xrange(10000000):
    point = [x, x + 1]
Run Code Online (Sandbox Code Playgroud)

不Python从重用列表point = [1, 2]中循环,只需在更新引用的每一次迭代point[0],并point[1]xx + 1?或者它是否在每次迭代中创建一个新列表并丢弃旧的列表?换句话说,就是性能相当于

point = [1, 2]
for x in xrange(10000000):
    point[0] = x
    point[1] = x + 1
Run Code Online (Sandbox Code Playgroud)

我只是好奇如果python在引擎盖下进行那种类型的优化

编辑:除了下面的每个人都说的,我根据自己的好奇心进行基准测试.

在我尊敬的thinkpad的Core2Duo上:

point = [1, 2]
for x in xrange(10000000):
    point = [x, x + 1]

# Result:
# real    0m6.164s


point = [1, 2]
for x in xrange(10000000):
    point[0] = x
    point[1] = x + 1

# Result:
# real    0m3.623s
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

不,CPython不会重用列​​表对象.该行point = [x, x + 1]创建一个全新的对象,如果point唯一的引用,前一个对象将被销毁.

Python 确实重用了tuple对象(达到极限),因为Python内部在Python程序的正常过程中创建并销毁了许多元组.请参阅如何在CPython中实现元组?