python 中的 yh = [ [ ] ] * num 是什么意思

what is the meaning of yh = [ [ ] ] * num in python

python中的yh = [ [ ] ] * num是什么意思。 并列在列表中? num = 3 yh = [ [[]],[[]],[[]] ] 是什么意思? 下面是计算帕斯卡三角形的完整代码。

def main():
    num = int(input('Number of rows: '))
    yh = [[]] * num
    for row in range(len(yh)):
        yh[row] = [None] * (row + 1)
        for col in range(len(yh[row])):
            if col == 0 or col == row:
                yh[row][col] = 1
            else:
                yh[row][col] = yh[row - 1][col] + yh[row - 1][col - 1]
            print(yh[row][col], end='\t')
        print()


if __name__ == '__main__':
    main()

[[]] 是一个包含单个空列表的列表。

List multiplication 创建一个新列表,其中包含重复该次数的相同元素。因此 [[]] * num 将创建一个长度为 num 的列表,其中每个元素都是相同的空列表。这通常不太可能是您想要的 - 因为所有元素都引用 same 列表,您对其应用的任何更改都会在所有地方看到。在此示例中,这无关紧要 - 代码永远不会访问这些项目。您可以改为 [None] * num,代码仍然有效。

有关此处危险的示例,请考虑以下示例:

>>> sequence = [[]] * 3
>>> print(sequence)
[[], [], []]
>>> sequence[0].append(77)
>>> print(sequence)
[[77], [77], [77]]

这与您所做的大致相同:

>>> empty = []
>>> sequence = [empty, empty, empty]
>>> print(sequence)
[[], [], []]
>>> empty.append(33)
>>> print(sequence)
[[33], [33], [33]]