Python 2.7:列表声明,使用“*”运算符初始化和for循环初始化之间的区别

时间:2016-09-10 18:49:48

标签: python list python-2.7

我想在python 2.7中声明一个列表并用10个列表初始化它,每个列表包含10个元素,全部初始化为0.所以它的列表包含10个列表。我这样做如下所示。

x = linspace(xmin,xmax,Nx); % or x=[x1,x2,x3,...]
y = linspace(ymin,ymax,Ny);
z = linspace(zmin,zmax,Nz);
[xsample,ysample,zsample]=ndgrid(x,y,z);
% or [xsample,ysample,zsample]=meshgrid(x,y,z);

J_z = exp(-xsample.^2-ysample.^2-zsample.^2);
J_y = ysample.*exp(-xsample.^2-ysample.^2-zsample.^2);
% some function or load from file.
% For example if we load a matrix `J(:,3)` with the size `(Nx*Ny*Nz)x3`, 
% where columns correspond to vector components.
% we can convert each vector component using `reshape(J(:,1),Nx,Ny,Nz)` for x-component.

Res_x=J_z.*ysample-J_y.*zsample;
M_x = integral3(@(x,y,z) interpn(xsample, ysample, zsample, Res_x, x, y, z), ...
                           xmin, xmax, ymin, ymax, zmin, zmax)
% or M_x = integral3(@(x,y,z) interp3(xsample, ysample, zsample, Res_x, x, y, z), ...
%                           xmin, xmax, ymin, ymax, zmin, zmax)

执行此操作后,当我尝试为10个列表中的任何列表中的任何元素分配值时,分配将反映在所有其他列表中。即

l = [[0] * 10] * 10

如上所示,在索引0处对列表的第一个元素赋值1也反映在索引1的列表中。所有其他10个列表都是这种情况。

但是,如果我这样做

l[0][0] = 1
print l[0] --> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
print l[1] --> 1, 0, 0, 0, 0, 0, 0, 0, 0, 0

这不会发生。我认为这与“*”运算符有关,但我不知道具体原因。如果有人能帮我理解这种行为,我将不胜感激。

0 个答案:

没有答案