Python 中的 x = [m]*n 语法是什么?

What is the x = [m]*n syntax in Python?

我在解释器中偶然发现了 'x = [m]*n' 和 运行 我可以看到代码分配了一个用 m 初始化的 n 元素数组。但是我在网上找不到这种代码的描述。这个叫什么?

>>> x = [0]*7
>>> x
[0, 0, 0, 0, 0, 0, 0]

* 只是一个乘法 - 因为 + 对于列表是一个直观的事情,意味着连接两个操作数,下一步是乘以标量 - [0] * N 意味着 "concatenate this list with itself N times"!

换句话说:* 是在 Python 中为其原始序列类型定义的运算符和一个整数,用于将序列与自身连接该次数。它适用于列表、元组甚至字符串。

这在 Python 中有些自然,还因为该语言允许运算符重载 - 所以 Python 程序员确实希望运算符对对象做有意义的事情。

应该注意组成结果列表的对象不是原始列表中对象的副本——而是对同一对象的引用。因此,如果原始列表的内容只是数字或其他一些不可变对象,则没有什么奇怪的 - 但如果它包含可变对象,例如内部列表,则在更改它们时可能会受到严重的副作用 - 就像在这个片段:

In [167]: a = [[0]] * 7

In [168]: a
Out[168]: [[0], [0], [0], [0], [0], [0], [0]]

In [169]: a[0].append(1)

In [170]: a
Out[170]: [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]

the Python docs' description开始,在整数n和原始序列类型之间使用的乘法运算符*对序列中的项目执行序列重复n次。所以我想你正在寻找的术语是 sequence repetition。请注意,这不是 "sequence copying",因为没有创建项目的副本 - 您有 n 对相同序列的引用。