介绍
在 python 的官方文档中,list.clear() 意为删除该列表中的所有元素,list.append() 意为在该列表末尾添加元素,两者(接口定义如下图)相遇就会有一些奇怪的事情,其中的具体原因尚未搞清楚,仅以本篇博文作为记录。
示例
举个例子,计划在名叫 num_list 的 List 中存储一些数据,如下图:
index | content |
---|---|
0 | [0, 1, 2, 3, 4] |
1 | [1, 2, 3, 4] |
2 | [2, 3, 4] |
使用 listA 构造每个 index 下的内容,然后通过 num_list.append() 添加到 num_list() 中,每次迭代前使用 listA.clear() 清空原有的 listA 中的数据,代码如下:
num_list = list()
listA = list()
print("listA.clear() -------")
for index in range(0, 3):
listA.clear()
for item in range(index, 5):
listA.append(item)
num_list.append(listA)
print("after index {},num_list is:{}".format(index, num_list))
运行结果如下:
怎么和预期的不一样啊,通过每次迭代时 num_list 内容的变化,发现 listA 的每次变化都会使 num_list 中所有内容变化,感觉是 listA.clear() 清空不彻底,于是仅修改上述代码中第5行,如下:
num_list = list()
listA = list()
print("listA = [] -------")
for index in range(0, 3):
listA = []
for item in range(index, 5):
listA.append(item)
num_list.append(listA)
print("after index {},num_list is:{}".format(index, num_list))
运行结果如下:
好嘛,这才是我想要的结果,但是为什么呢?clear() 后为什么通过 list.append() 添加的对象元素都会被更新呢?
总结
To be continue …