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

时间:2016-01-08 17:29:22

标签: 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', '']]

2 个答案:

答案 0 :(得分:5)

您可以使用range()

a = [[''] * 3 for _ in range(3)]

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

答案 1 :(得分:0)

你可以这样做:

a = ['','','']
b = ['','','']
c = ['','','']

d = [a, b, c]

不确定这是你所追求的,但d [0] [1] ='x'返回:

[['','x',''],['','',''],['','','']]

因为即使像a = b = c = []之类的赋值也会创建对同一对象的三个引用,最终会出现同样的问题。