gpt4 book ai didi

python - python 中关于变量的混淆。 python如何使用变量?

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:59 24 4
gpt4 key购买 nike

当我运行这个时,

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]]

为什么两个代码有不同的结果?在我看来,它们应该是相同的。为什么不同的部分会产生不同的结果?

最佳答案

在 Python 中,包含列表的变量更像指针。当您说key_=key时,您是在告诉Python在两种情况下使用相同列表,而不是副本。如果您想要原始列表的副本,请使用 key_=[x.copy() for x in key]。这将复制 key 中每个项目的内容(列表)。

示例:

创建两个包含 1、2 和 3 的列表

>>> 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_listmy_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]]

关于python - python 中关于变量的混淆。 python如何使用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59529403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com