Python 使用列表上的运算符*创建独立对象

Python 使用列表上的运算符*创建独立对象,python,Python,我试图在不键入所有元素的情况下初始化一个二维(3x3)列表,因为它们都是相同的 但是,似乎只有该矩阵的第一行被真正创建为新对象,后续行只是对第一行的引用 如何创建独立对象的所有直线 下面是一个例子来说明这一点: # Create a bi-dimentional list a=[[''] * 3] * 3 print a >>>[['', '', ''], ['', '', ''], ['', '', '']] # change a single element, on fi

我试图在不键入所有元素的情况下初始化一个二维(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', '']]
你可以做:

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

d = [a, b, c]
不确定您要的是什么,但d[0][1]=“x”返回:

[['','x',''],['','',''],['','','']]
因为即使是像a=b=c=[]这样的赋值也只会创建对同一对象的三个引用,并且最终会出现相同的问题。

您可以执行以下操作:

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

d = [a, b, c]
不确定您要的是什么,但d[0][1]=“x”返回:

[['','x',''],['','',''],['','','']]
因为即使是像a=b=c=[]这样的赋值也只会创建对同一对象的三个引用,并且最终会出现相同的问题。

您可以使用
range()

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

您可以使用
范围()


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

指针在这里不是一个好术语。更喜欢引用。指针在这里不是一个好术语。更喜欢参考书。