【问题标题】:function returning previous value of a list, which is not updated返回列表的先前值的函数,该值未更新
【发布时间】:2021-06-04 05:24:36
【问题描述】:

在我的代码中,有一些预先编写的部分是不可更改的。当我从方法返回一个列表并且在主函数中它没有得到更新的列表。当我尝试打印时,它会打印旧列表值请帮助我将更新后的列表返回到主函数

class Solution: 
    def func(self,n,p,arr)
        l=arr.copy()
        arr=[]
        for i in range(1,P+1):
           if i in l:
               arr.append(l.count(i))
           else:
               arr.append(0)
        return arr
#The below part is pre-written which is immutable
if __name__=="__main__":
    n=5
    p=5
    arr=[2, 3, 2, 3, 5]
    ob=Solution()
    ob.func(n,p,arr)
    for i in arr:
        print(i)

【问题讨论】:

  • 您需要执行arr = ob.func(n, p, arr)(更好的方法)或删除arr = []。在函数内部重新分配参数永远不会影响最初传入的变量;要从函数中获取信息,您通常必须在函数内部使用return(您正在这样做),并将返回的值分配给函数外部的变量(您没有这样做)。
  • 我明白你在说什么,但主要部分是预先写好的,我无法更改,如果我删除 arr=[] 之前的元素存在。
  • arr.clear() 也可用于删除 arr 中的所有元素,如果需要,无需重新分配它 - 作为 arr = [] 的替代方案。这将持续存在,因为它是 mutation,而不是 assignment

标签: python-3.x function


【解决方案1】:

数组保持旧值,因为Python函数接收参数是基于对象引用传递(函数内部的参数与外部传递的变量是独立的,但它指向相同的内存位置)。

在您的func() 中,arr 接收值作为函数参数,但是,之后您通过第 4 行的语句将 func 中的变量 arr 分配给内存中的另一个对象。

为了达到你的目的,你可以把arr=[](第4行)换成arr.clear(),让它指向旧内存,从而相应地影响内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多