1 利用 * 星号生成二维及二维以上的list时,特别要注意有的量引用是相同的.如果后面要给list赋值,最好不要这样生成list.
可以先这样生成,再打印输出后,粘贴到程序中重新赋值.
a = [['a'] * 3] * 3 print(a) a[0][0]= 'b' print(a) # [['a', 'a', 'a'], ['a', 'a', 'a'], ['a', 'a', 'a']] # [['b', 'a', 'a'], ['b', 'a', 'a'], ['b', 'a', 'a']]
参考:https://www.cnblogs.com/liaohuiqiang/p/9668303.html
2 append函数添加可变对象的时候也会出现类似的情况
person = {'name': '', 'id': 0} team = [] for i in range(3): x = person x['id'] = i team.append(x) print(id(team[i])) team[0]['name'] = 'Jack' team[1]['name'] = 'Pony' team[2]['name'] = 'Crossin' print(team) print(team[1]) # 140630417520392 # 140630417520392 # 140630417520392 # [{'name': 'Crossin', 'id': 2}, {'name': 'Crossin', 'id': 2}, {'name': 'Crossin', 'id': 2}] # {'name': 'Crossin', 'id': 2}