【问题标题】:y.append(sum(x)) modifies x array by adding sum of x array to x array and i don't know why [duplicate]y.append(sum(x)) 通过将 x 数组的总和添加到 x 数组来修改 x 数组,我不知道为什么 [重复]
【发布时间】:2021-09-06 01:06:20
【问题描述】:

所以基本上我想要一个数组(结果),我将第二个数组(数组)的总和添加到其中,但是 当我尝试添加到数组的结果总和时,它会添加到数组中应该添加到结果中的内容

def some_function(signature, n):

    array = result = signature
    count = 1

    while count <= n:
            print(array)       # prints [1, 1, 1]

            result.append(sum(array))        # Here i don't get it why result.append modifies array.
                                                                     # Without result.append everything works fine
            print(array)       # prints [1, 1, 1, 3]

            array.append(sum(array))    

            print(array)       # prints [1, 1, 1, 3, 6]

        del array[0]

        count += 1

    return result

print(some_function([1, 1, 1], 10))

【问题讨论】:

  • 因为arrayresults 都指向同一个数组。 signature 也会随着他们而改变。

标签: python arrays sum append python-3.9


【解决方案1】:

array = result = signature 不会复制任何内容。所有三个变量都指向同一个列表,因为赋值不会复制。

因为它们指向同一个列表,所以result.append(sum(array))array.append(sum(array))result.append(sum(signature))signature.append(sum(result)) 完全相同——都是一样的。

您可以手动复制列表:

array = signature.copy()
result = signature.copy()

【讨论】:

  • 是的,我在几分钟前就知道了,但直到现在我才知道为什么。感谢您明确表示我做了 array = [x for x in signature] 和 result = [x for x in signature] 并且它有效
猜你喜欢
  • 2014-04-25
  • 2019-02-03
  • 2022-11-16
  • 2018-01-19
  • 2016-07-12
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
相关资源
最近更新 更多