追加两个列表会导致按引用调用

appending two lists results in call by reference

提问人:rishabh 提问时间:10/25/2021 更新时间:10/25/2021 访问量:39

问:

在尝试使用各种元素制作多个列表时,我遇到了一个问题,即先前附加的元素也会发生变化。

import random
def randArr(length):
    num = []
    for i in range(length):
        num.append(random.randint(-100, 100))
    return num

l1 = []
l2 = []
for i in range(3):
    l2.clear()
    l2.append(randArr(1))
    l1.append(l2)
    print('l1', l1)
    print('l2', l2)
    print()

l1 [[[-8]]]
l2 [[-8]]

l1 [[[43]], [[43]]]
l2 [[43]]

l1 [[[-96]], [[-96]], [[-96]]]
l2 [[-96]]

我知道我可以替换第 12 行来代替,但是出于各种原因我需要使用 appendl2 = randArr(1)

关于如何解决这个问题的任何建议?

Python 列表 通过引用传递

评论

0赞 Axe319 10/25/2021
替换为 。使用意味着你只是多次附加相同的突变。l2.clearl2 = []list.clear()listl1
1赞 juanpa.arrivillaga 10/25/2021
这不是通过引用调用。Python 从不使用引用调用(也不使用值调用)。
0赞 juanpa.arrivillaga 10/25/2021
无论如何,您一直在附加相同的列表:,因此,当然,它变成了一个对同一列表的多个引用的列表。只需创建一个新列表,而不是 ing 和附加相同的列表l1.append(l2)l1.clear
0赞 porrrwal 10/25/2021
或者可能在下一行(第 13 行)中使用。l1 += l2
0赞 rishabh 10/25/2021
创建一个新列表或使用效果很好,谢谢。对于最终程序,使用和使其工作的组合l2 = []l2 = []l1.append(l2.copy())

答: 暂无答案