我试图找到回文,所以我将列表复制到另一个变量,但是当我使用reverse
函数时,两个变量都被反转了。为什么会这样呢?
我可以使用循环并以相反的顺序一个接一个地添加,但是我真的想知道为什么reverse
函数以这种方式工作。
arr = list(input())
ar = arr
ar.reverse()
print(arr, ar)
print("YES" if arr == ar else "NO"
我希望找到回文症。
答案 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)
返回一个不同的数字,表示它是一个不同的对象。