初始化:
rows = [{}] * 9 # 这里的 * 9 是把{}这个对象复制了9次,更改值的时候,每个被复制的对象也会跟随更改 columns = [{} for i in range(9)] # [{}, {}, {}, {}, {}, {}, {}, {}, {}]
本以为两种初始化方式是一样的,都是[{}, {}, {}, {}, {}, {}, {}, {}, {}],
但是在取单个字典赋值的时候发现竟然不一样,
rows[0][0] = 1 columns[0][0] = 1
结果:
[{0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}]
[{0: 1}, {}, {}, {}, {}, {}, {}, {}, {}]
原因:
rows = [{}] * 9 # 这里的 * 9 是把{}这个对象复制了9次,更改值的时候,每个被复制的对象也会跟随更改
实例代码:
# 两种不同的方式,在list中初始化多个字典
def dictinlist(self):
rows = [{}] * 9 # [{}, {}, {}, {}, {}, {}, {}, {}, {}]
columns = [{} for i in range(9)] # [{}, {}, {}, {}, {}, {}, {}, {}, {}]
print(rows)
print(columns)
# 造成这样的结果是因为两者的初始化不一样
rows[0][0] = 1 # 每一个字典都加入了
columns[0][0] = 1 # 只是一个字典中加入了,
print(rows) # [{0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}]
print(columns) # [{0: 1}, {}, {}, {}, {}, {}, {}, {}, {}]
输出:
[{}, {}, {}, {}, {}, {}, {}, {}, {}]
[{}, {}, {}, {}, {}, {}, {}, {}, {}]
[{0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}, {0: 1}]
[{0: 1}, {}, {}, {}, {}, {}, {}, {}, {}]