Python 列表切片与原始列表获胜时使用指针的比较';不能改变

Python 列表切片与原始列表获胜时使用指针的比较';不能改变,python,list,memory,slice,Python,List,Memory,Slice,我正在学习使用列表和切片,并且在Aaron Hall的《内存注意事项》一节中读到了“Python列表的切片在内存中创建新对象” 假设我需要在列表的某个范围内执行一些只读操作。 是否建议使用指针(c术语),因为切片会创建我不需要的新对象? 假设原始列表不会改变,我能说下面的方法2总是更好吗 cost = [1,2,4,5] #method1 for i in cost[:2]: #do something for the first two elements print(i)

我正在学习使用列表和切片,并且在Aaron Hall的《内存注意事项》一节中读到了“Python列表的切片在内存中创建新对象”

假设我需要在列表的某个范围内执行一些只读操作。 是否建议使用指针(c术语),因为切片会创建我不需要的新对象? 假设原始列表不会改变,我能说下面的方法2总是更好吗

cost = [1,2,4,5]

#method1
for i in cost[:2]:
    #do something for the first two elements
    print(i)

#method2
for i in range(2):
    #do something for the first two elements
    print(cost[i])

range(2)
创建一个新的
range
对象。它与切片在同一点超出范围。我不认为内存方面的考虑更倾向于一种,在Python中通常不鼓励引入不必要的索引。一些快速计时显示,方法2的速度始终是方法1的两倍左右,无论列表的长度如何(测试长度从10到100000000…),请尽可能让代码清晰,除非您实际遇到性能问题。