我的意思是,如果你覆盖一个具有相同形状列表的列表,它是否保留第一个列表?例如:
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]以x和x + 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)
不,CPython不会重用列表对象.该行point = [x, x + 1]创建一个全新的对象,如果point唯一的引用,前一个对象将被销毁.
Python 确实重用了tuple对象(达到极限),因为Python内部在Python程序的正常过程中创建并销毁了许多元组.请参阅如何在CPython中实现元组?
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |