我正在尝试初始化一个二维(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', '']]
答案 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 = []之类的赋值也会创建对同一对象的三个引用,最终会出现同样的问题。