使用列表上的operator*创建独立对象

Ale*_*lex 1 python

我正在尝试初始化一个二维(3x3)列表而不键入所有元素,因为它们都是相同的.

但是,似乎只有这个矩阵的第一行真的被创建为一个新对象,而后续行只是对第一行的引用.

我怎么能创建所有行都是独立的对象?

这是一个例子来说明这一点:

# Create a bi-dimentional list
a=[[''] * 3] * 3
print a
>>>[['', '', ''], ['', '', ''], ['', '', '']]

# change a single element, on first line
# notice that it will change also the elements at other lines
a[0][1] = 'x'
print a
[['', 'x', ''], ['', 'x', ''], ['', 'x', '']]
Run Code Online (Sandbox Code Playgroud)

Del*_*gan 5

你可以使用range():

a = [[''] * 3 for _ in range(3)]
Run Code Online (Sandbox Code Playgroud)

使用*list(更常见的是使用对象)实际上只是创建引用,您必须创建新列表.