Python3.8二维数组拼接正在产生奇怪的结果。拼接是使列表指向内存
我的目的是顺时针旋转列表1并将其打印为列表2。请参见下面的代码以获取相同的信息。 我的问题是,每当我执行此操作时,第三行代码的列表1和列表2都指向同一位置。据我所知,如果我写list1=list2,我会这样做,但是切片list2=list1[:] 应生成列表2和列表1的副本。有人能帮我吗Python3.8二维数组拼接正在产生奇怪的结果。拼接是使列表指向内存,python,list,slice,Python,List,Slice,我的目的是顺时针旋转列表1并将其打印为列表2。请参见下面的代码以获取相同的信息。 我的问题是,每当我执行此操作时,第三行代码的列表1和列表2都指向同一位置。据我所知,如果我写list1=list2,我会这样做,但是切片list2=list1[:] 应生成列表2和列表1的副本。有人能帮我吗 # Python 3.8 list1 = [[1,2,3],[4,5,6],[7,8,9]] print (list1[0],list1[1],list1[2],sep='\n') list2 = list
# Python 3.8
list1 = [[1,2,3],[4,5,6],[7,8,9]]
print (list1[0],list1[1],list1[2],sep='\n')
list2 = list1[:][:]
for i in range(3):
for j in range(3):
list2[i][j] = list1[2-j][i]
print ('\n_________\n')
print (list2[0],list2[1],list2[2],sep='\n')
print ('\n_________\n')
print (list1[0],list1[1],list1[2],sep='\n')
输出
[1,2,3]
[4,5,6]
[7,8,9]
[7,4,7] [8,5,4] [9,4,7]
[7,4,7] [8,5,4]
[9,4,7]Python有深度复制和浅层复制的概念。 在您的案例中,切片操作生成list1的浅拷贝
>>> list1 = [[1,2,3],[4,5,6],[7,8,9]]
>>> print (list1[0],list1[1],list1[2],sep='\n')
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
>>>
>>> list2 = list1[:][:]
>>> list2
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> id(list1)
2123959541504
>>> id(list2)
2123959572032
>>> id(list1[0])
2123958209920
>>> id(list2[0])
2123958209920
请注意,每一行如何指向相同的内存位置,因此更改列表2中的行元素也将更改列表1
您可以改为使用python的复制库
>>> from copy import deepcopy
>>> list2 = deepcopy(list1)
>>> id(list2[0])
2123959574016
>>> id(list1[0])
2123958209920
请将标题读为切片,而不是切片。预期输出是什么?预期输出是7 4 1 8 5 2 9 6 3