在Python(2和3)中。每当我们使用列表切片时,它都会返回一个新对象,例如:
l1 = [1,2,3,4]
print(id(l1))
l2 = l1[:]
print(id(l2))
Run Code Online (Sandbox Code Playgroud)
输出量
>>> 140344378384464
>>> 140344378387272
Run Code Online (Sandbox Code Playgroud)
如果使用元组重复相同的事情,则返回相同的对象,例如:
t1 = (1,2,3,4)
t2 = t1[:]
print(id(t1))
print(id(t2))
Run Code Online (Sandbox Code Playgroud)
输出量
>>> 140344379214896
>>> 140344379214896
Run Code Online (Sandbox Code Playgroud)
如果有人能弄清为什么会发生,那将是很棒的,在我的整个Python经验中,我一直以为空切片会返回一个新对象的印象。
我的理解是,它返回的对象与元组是不可变的相同,因此没有必要为其创建新副本。但是同样,文档中也没有提到它。