【发布时间】:2018-04-17 16:14:11
【问题描述】:
我有一个列表,我想了解其中的一部分。我截取了[0:1] 的一部分:
>>> l=[1,2,3,4]
>>> id(l[0])
140079803522784
>>> id(l[0:1][0])
140079803522784
它们是一样的。但是:
>>> l[0]=7
>>> l
[7, 2, 3, 4]
>>> l[0:1][0]=13
>>> l
[7, 2, 3, 4]
所以 slice 的 0-element 和 list 的 0-element 是一样的,但是当我在 slice 中改变它时,它在列表中并没有改变。为什么不呢?
【问题讨论】:
-
切片创建浅副本...
-
因为切片会生成一个新列表。
-
现在尝试使用任意对象(例如自定义类)而不是整数(不可变)来做同样的事情。你会大吃一惊的。
-
@DeepSpace 我做到了。同样的事情: >>>l=[[1,2],[1,3]] >>> l[0:1][0]=[7] >>> l [[1, 2], [1 , 3]]
-
在你的第一个例子中,
l[0]和l[0:1][0]只不过是l的元素,特别是它们是第一个元素,即数字1。它们与原始列表没有关联。
标签: python