先上代碼:
>>> 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之間的賦值
是淺拷貝
但是用第三種方法來清空這個列表的話苍柏,相當(dāng)于重新定義一個相同名字的list, 這時候用的應(yīng)該是另外一段內(nèi)存了肪康,所以這樣的話荚恶,dict就不會改變撩穿;
如果不出所料的話,如果把對第二段代碼對list 的操作改為append, dict的結(jié)果也會發(fā)生改變
這里要特別注意谒撼,以后清空list的時候冗锁,盡量用list = [], 而不要用list[:] = [ ] 或者 或者 list.clear()