为什么我的初始变量会改变,即使它是一个副本?

2024-04-26 14:23:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到回文,所以我将列表复制到另一个变量,但是当我使用reverse函数时,两个变量都会反转。为什么会这样?你知道吗

我可以使用循环并从相反的顺序逐个追加,但我真的想知道reverse函数为什么这样工作。你知道吗

arr = list(input())
ar = arr
ar.reverse()
print(arr, ar)
print("YES" if arr == ar else "NO"

我希望能找到回文。你知道吗


Tags: 函数no列表inputif顺序elselist
1条回答
网友
1楼 · 发布于 2024-04-26 14:23:30

这是因为arr.reverse()在适当的位置反转列表(另请参见help(list.reverse))。你知道吗

也就是说,您需要制作列表的副本,然后反转:

arr = list(input())
ar = arr.copy()
ar.reverse()
print(arr, ar)
print("YES" if arr == ar else "NO")

(注意我如何将ar = arr更改为ar = arr.copy()


您可以使用id函数自己“诊断”这个问题,该函数为每个对象返回一个唯一的标识符:

>>> arr = list("foo bar beep boop")
>>> id(arr)
4343238976
>>> ar = arr
>>> id(ar)
4343238976
>>> copied = arr.copy()
>>> id(copied)
4341383968

注意id(ar)id(arr)如何返回相同的数字(本例中是4343238976),这意味着它们指向相同的对象。同时id(copied)返回一个不同的数字,这意味着它是一个不同的对象。你知道吗

相关问题 更多 >