先上代码:
>>> a_dict = {}
>>> b_list = [1,2,3]
>>> a_dict[1] = b_list
>>> b[:] = []
>>> b_list[:] = []
>>> a_dict
{1: []}
>>> a2_dict = {}
>>> c2_list = [4,5,3]
>>> a2_dict[2] = c2_list
>>> a2_dict
{2: [4, 5, 3]}
>>> c2_list.clear()
>>> a2_dict
{2: []}
>>> a1_dict = {}
>>> b1_list = [1,2,3]
>>> a1_dict[1] = b1_list
>>> b1_list = []
>>> a1_dict
{1: [1, 2, 3]}
这是个很有意思的bug
每段代码的都是用一个在一个字典中存如一个list(用list的名字作为形参), 存完之后再对list清空
但是对于第一二段代码随着字典的清空,dict的元素也跟着变化;意味着这里的list和dict之间的赋值
是浅拷贝
但是用第三种方法来清空这个列表的话,相当于重新定义一个相同名字的list, 这时候用的应该是另外一段内存了,所以这样的话,dict就不会改变;
如果不出所料的话,如果把对第二段代码对list 的操作改为append, dict的结果也会发生改变
这里要特别注意,以后清空list的时候,尽量用list = [], 而不要用list[:] = [ ] 或者 或者 list.clear()