在Python3.7中,为什么我的变量被重写,而我没有为它分配任何新的内容?

在Python3.7中,为什么我的变量被重写,而我没有为它分配任何新的内容?,python,python-3.x,Python,Python 3.x,刚开始学习python时,我正在尝试编写一个函数,将给定列表中的整数向右旋转,感觉自己发现了一个bug。到目前为止,我提出的代码如下: def LROTR (L, n): # shifting lists to right n = -n%len(L) for i in range(0, n): L.append(L.pop(0)) return L sp0 = list(range(31, -1, -1)) print(sp0) s0p7 = LR

刚开始学习python时,我正在尝试编写一个函数,将给定列表中的整数向右旋转,感觉自己发现了一个bug。到目前为止,我提出的代码如下:

def LROTR (L, n): # shifting lists to right
    n = -n%len(L)
    for i in range(0, n):
        L.append(L.pop(0))
    return L

sp0   = list(range(31, -1, -1))
print(sp0)
s0p7  = LROTR(sp0, 7)
s0p18 = LROTR(sp0, 18)

print(sp0)
变量sp0应该是旋转前的列表,在调用LROTR函数后会无故更改!有人能帮我解决这个问题吗?这真的是一个bug还是我误会了python

在Windows 10上使用Python 3.7.0,我的打印输出是:

[31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[7, 6, 5, 4, 3, 2, 1, 0, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8]
我期望:

[31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

列表是可变的:如果将对列表的引用交给函数,该函数可以修改列表

您可能要做的是为函数提供列表的副本:

s0p7  = LROTR(sp0.copy(), 7)
s0p18 = LROTR(sp0.copy(), 18)
python传递参数