我在python解释器中尝试了以下内容:
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>
Run Code Online (Sandbox Code Playgroud)
这里,在将字典'b'附加到列表'a'之后,我正在改变字典'a'中与键1对应的值.不知怎的,这种变化也反映在列表中.当我将字典附加到列表中时,我不只是附加字典的值吗?看起来好像我已经将一个指向字典的指针附加到列表中,因此对字典的更改也会反映在列表中.
我不希望更改反映在列表中.我该怎么做?
感谢您的时间!
我在while循环中有以下代码.
if gender == 0 and len(men) < 51 :
height = float((random.uniform(1.3, 1.9) + (random.randint(10, 20)/100.)).__format__('.2f'))
weight = float((random.uniform(45, 100) * height).__format__('.2f'))
attr['height'] = height
attr['weight'] = weight
men.append(attr)
Run Code Online (Sandbox Code Playgroud)
所以这段代码总是给出一些随机高度和随机权重.但是outsite de loop(当它完成时).如果我这样做print men,我得到以下结果:
[{'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, {'weight': 76.64, 'height': 1.75}, …Run Code Online (Sandbox Code Playgroud) 在这段代码中,我将零添加到一个空列表中,然后当它包含 9 个零时,该列表将添加到另一个称为 board 的列表中,然后我清除 9 个零的行并再次重复该过程 9 次:
row = []
for i in range(9):
for j in range(9):
row.append('0')
self.board.append(row)
row.clear()
print(board)
Run Code Online (Sandbox Code Playgroud)
经过一些打印后,我了解到在外循环结束之前,板包含所有 9 行 9 个零,但是当row.clear()最后一次执行时,它会清除所有零行,给我一个包含 9 个空列表的列表的结果,这当然不是我想要的,我知道如何解决它,但我不明白为什么当循环到达末尾时,所有内部零列表都被清除。