运行此命令时, 我明白了: 但是,当我仅更改第二行时, 我明白了: 两个代码为什么会有不同的结果?
我认为它们应该相同。
为什么不同的部分会产生不同的结果? 答案 0 :(得分:0) 在Python中,包含列表的变量更像指针。当您说 示例: 制作两个包含1、2和3的列表 现在让我们编辑原始列表的值... 之所以复制更改,是因为 让我们更改 再一次,由于它们都指向同一列表,因此在这两个值之间进行了更新。 现在让我们看看如果使用 因此我们可以看到两个列表以相同的内容开头,但有所不同。 使用 编辑: 此代码按值复制 使用此命令的输出是key=[[0, 0, 0], [1, 0, 0], [0, 1, 1]]
key_=[[0, 0, 0], [1, 0, 0], [0, 1, 1]]
m=3
for i_ in range(1,m+1):
for j_ in range(1,m+1):
key[j_-1][m+1-i_-1]=key_[i_-1][j_-1]
print(key,key_,sep='\n')
>>> [[0, 1, 0], [1, 0, 0], [1, 0, 0]]
[[0, 0, 0], [1, 0, 0], [0, 1, 1]]
key=[[0, 0, 0], [1, 0, 0], [0, 1, 1]]
key_=key
m=3
for i_ in range(1,m+1):
for j_ in range(1,m+1):
key[j_-1][m+1-i_-1]=key_[i_-1][j_-1]
print(key,key_,sep='\n')
>>> [[0, 1, 0], [0, 0, 0], [0, 0, 0]]
[[0, 1, 0], [0, 0, 0], [0, 0, 0]]
1 个答案:
key_=key
时,是在告诉Python在两种情况下都使用相同列表,而不是副本。如果要复制原始列表,请使用key_=[x.copy() for x in key]
。这将复制key
中每个项目(列表)的内容。>>> my_list = [1,2,3]
>>> my_list
[1, 2, 3]
>>> my_list2 = my_list
>>> my_list2
[1, 2, 3]
>>> my_list[0] = 10
>>> my_list
[10, 2, 3]
>>> my_list2
[10, 2, 3]
my_list
和my_list2
是相同,而不仅仅是它们的副本。my_list2
:>>> my_list2[1] = 20
>>> my_list2
[10, 20, 3]
>>> my_list
[10, 20, 3]
copy
方法会发生什么:>>> my_list_copy = my_list.copy()
>>> my_list_copy
[10, 20, 3]
>>> my_list[0] = 1
>>> my_list
[1, 20, 3]
>>> my_list_copy
[10, 20, 3]
is
运算符,我们还可以看到3个列表变量之间的区别:>>> my_list is my_list2
True
>>> my_list is my_list_copy
False
>>>
key
是一个包含列表作为项目的列表。调用copy
方法时,仅复制外部列表,因此两个列表(即子列表)中的实际项目都相同。要通过值而不是通过引用有效复制它们,我们可以使用简单的列表理解:key_=[x.copy() for x in key]
key
中的每个项目,并创建一个包含这些项目的新列表。[[0, 1, 0], [1, 0, 0], [1, 0, 0]]
[[0, 0, 0], [1, 0, 0], [0, 1, 1]]