阅读文档:明确蟒蛇德尔如何工作列表和切片
德尔:目标列表的缺失递归删除每一个目标,从 从左到右。
你能澄清一下为什么这段代码能够正常工作吗?
a = [1,2,3]
c = a[:]
del c
print a
del a[:]
print a
此打印:
[1, 2, 3]
[]
如果片是指向原始列表的相同元素,那么为什么切片的变量赋值的缺失不作a
空的,为什么一个新的列表删除未引用的切片会删除a
的元素?
UPD
# -*- coding: utf-8 -*-
a = [1,2,3]
c = a[:]
def list_info(lst):
print "list id: {}".format(id(lst))
print "list of item ids:"
for item in lst:
print "id: {}; value: {}".format(id(item), item)
print ""
list_info(a)
list_info(c)
list_info(a[:])
打印:
list id: 26945296
list of item ids:
id: 23753600; value: 1
id: 23753588; value: 2
id: 23753576; value: 3
list id: 26920560
list of item ids:
id: 23753600; value: 1
id: 23753588; value: 2
id: 23753576; value: 3
list id: 26946136
list of item ids:
id: 23753600; value: 1
id: 23753588; value: 2
id: 23753576; value: 3
正如你所看到的,所有列表项实际上是相同的对象。
“如果一个切片是新列表”假定事实没有证据。 –
做'id(a)'和'id(c)'...它们是不同的,因为'c = a [:]'会做一个浅拷贝 – Sundeep
所有这些int都是相同的对象; “包含”它们的列表实际上包含*引用*。删除一些这些引用不会影响其他引用。 –