如何将函数的局部值返回到全局列表?

2024-09-28 22:26:05 发布

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

我正在编写一个def函数,它将接收列表的输入。首先,它将检测该列表中是否有相同的值,如果是,它将把它放到另一个列表中,如果不是,它将把它放到第一个列表中。代码如下所示:

uniqueList = []
leftover = []
def addToList(number):
    if any(uniqueList.count(number) > 0 for number in UniqueList):
        leftover.append(number)
        return leftover
    else:
        uniqueList.append(number)
        return uniqueList

问题是当我运行它时,输入的数字似乎没有保存到列表中,例如,第一个输入是'20',然后输出是[20],表示唯一列表,[]表示剩余。但当我再次输入'20'时,输出仍然是[20]表示唯一列表,而[]表示剩余。为什么会这样


Tags: 函数代码innumber列表forreturnif
1条回答
网友
1楼 · 发布于 2024-09-28 22:26:05

return leftoverreturn uniqueList不复制,而是返回对列表的引用,所以如果列表的内容发生更改,则中的值将更改为where reference。然后,返回这样的列表以使用copy模块

import copy

uniqueList = []
leftover = []
def addToList(number):
    if any(uniqueList.count(number) > 0 for number in UniqueList):
        leftover.append(number)
        return copy.copy(leftover)
    else:
        uniqueList.append(number)
        return copy.copy(uniqueList)

但是,这是shallow copy,如果要复制嵌套对象,请使用deepcopy

相关问题 更多 >