【问题标题】:How does python change the value of input variable in a function even when it's assigned to another variable? [duplicate]即使将输入变量分配给另一个变量,python如何更改函数中输入变量的值? [复制]
【发布时间】:2017-05-24 10:42:35
【问题描述】:

我想定义一个函数,其中 a list x 是它的输入变量,假设我想在执行函数后使输入变量 (x) 的值不变,我认为我应该做的是将输入变量 (x) 的值分配给另一个变量 (y) 并对这个新变量 (y) 进行计算并在最后返回 y 保持输入变量 x 不变(这是第二个函数代码)。

实现该代码给出的结果与我没有添加新变量 y 并对 y 执行计算一样。 x 的值发生了变化。 (它给出的结果与第一个函数相同)

我发现通过构造一个空列表 y 然后将 x 的条目一个接一个地添加到 y 然后对 y 执行操作来间接地将 x 的值分配给 y 可以解决问题(如在第三个函数中代码)。

我的问题是,python 为什么要这样做?当我将 x 的值分配给 y 并对 y 进行计算时,不应该是这样吗?我错过了什么?

def li(X):
   X.append(1)
   return(X)

def le(X):
   Y=X
   Y.append(1)
   return(Y)

def lo(X):
   Y=[]
   for i in range(X):
          Y.append(X[i])
   Y.append(1)
   return(X)

【问题讨论】:

    标签: python function python-3.x


    【解决方案1】:

    我错过了什么?

    您的问题在于 Python 变量的工作方式。您会看到,当您将列表 x 分配给变量 y 时,您并没有创建 x副本。而是您为列表x 创建引用。这意味着当任一变量(xy)发生变化时,它们都会发生变化,因为它们都指向完全相同的列表。

    您需要显式地告诉 Python 创建 x 的副本到变量 y。这样,两个变量将相互独立:

    >>> x = [1, 2, 3]
    >>> 
    >>> def change(x):
    ...     y = x[:] # create a copy of x and not a reference
    ...     y.append(4) # change the copy
    ...     return y
    ... 
    >>> x # before change
    [1, 2, 3]
    >>> change(x)
    [1, 2, 3, 4]
    >>> x # after change
    [1, 2, 3]
    >>> 
    

    【讨论】:

    • 好技巧,非常感谢:)
    • @FawzyHegab 非常感谢 Fawzy。
    猜你喜欢
    • 1970-01-01
    • 2023-02-09
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多