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

2024-09-30 03:24:11 发布

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

刚开始学习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函数后会被无缘无故地更改!有人能帮我解决这个问题吗?这真的是个虫子还是我误会了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]

Tags: to函数代码right列表defrange整数
1条回答
网友
1楼 · 发布于 2024-09-30 03:24:11

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

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

s0p7  = LROTR(sp0.copy(), 7)
s0p18 = LROTR(sp0.copy(), 18)

相关问题 更多 >

    热门问题