Python 什么';这两种初始化数组的方法有什么区别?
及Python 什么';这两种初始化数组的方法有什么区别?,python,list,initialization,Python,List,Initialization,及 我发现,如果我使用前者初始化数组,并运行matrix[1][1]=1,它会将每行的第二列设置为1。第二个按我的意愿表演。我不明白为什么 [[0]*1005]*1005将创建一个包含1005个引用的数组,该数组指向一个包含1005个零的数组。它们都是相同的引用,因此更改其中一个将更改所有其他引用。不过,您可以将工作代码缩短为: matrix = [[0 for _ in range(1005)] for _ in range(1005)] 这几乎是关于列表乘法语法的唯一警告,实际上:)[[0
我发现,如果我使用前者初始化数组,并运行
matrix[1][1]=1
,它会将每行的第二列设置为1。第二个按我的意愿表演。我不明白为什么 [[0]*1005]*1005
将创建一个包含1005个引用的数组,该数组指向一个包含1005个零的数组。它们都是相同的引用,因此更改其中一个将更改所有其他引用。不过,您可以将工作代码缩短为:
matrix = [[0 for _ in range(1005)] for _ in range(1005)]
这几乎是关于列表乘法语法的唯一警告,实际上:)
[[0]*1005]*1005
将创建一个包含1005个引用的数组,该数组包含1005个零。它们都是相同的引用,因此更改其中一个将更改所有其他引用。不过,您可以将工作代码缩短为:
matrix = [[0 for _ in range(1005)] for _ in range(1005)]
这几乎是所有人对列表乘法语法给出的唯一警告,实际上:)只是为了扩展已经说过的内容
matrix = [[0] * 1005 for _ in range(1005)]
只是为了扩大已经说过的内容
matrix = [[0] * 1005 for _ in range(1005)]
你能在python参考中给我一个关于这个的链接吗。实际上,
[0]*1005
的意思是什么。谢谢。@user674199:。请参阅s*n:“n个串联的s的浅拷贝”。[0]*1005
是可以的,因为整数是不可变的。你能在python参考中给我一个关于这个的链接吗。实际上,[0]*1005
的意思是什么。谢谢。@user674199:。请参阅s*n:“n个串联的s的浅拷贝”。[0]*1005
是可以的,因为整数是不可变的。可能是Oops的重复。这不是我想要选择的问题。可能是Oops的重复。这不是我想要选择的问题。