为什么我的初始变量即使是副本也会更改?

时间:2019-08-05 20:22:16

标签: python python-3.x

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

我可以使用循环并以相反的顺序一个接一个地添加,但是我真的想知道为什么reverse函数以这种方式工作。

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

我希望找到回文症。

1 个答案:

答案 0 :(得分:3)

这是因为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)返回一个不同的数字,表示它是一个不同的对象。