【问题标题】:Python function reassigning external list valuesPython函数重新分配外部列表值
【发布时间】:2020-12-26 09:10:29
【问题描述】:

我无法使用函数重新分配列表中的值。我除了变量 x 在运行函数后保持不变。但是它以某种方式改变了。

我的代码是:

    x = [0,0,0]
    def test(j):
        j[0] = "K"
        return j

    print (x)
    t=test(x)
    print (t)
    print (x) 

我的输出是:

[0, 0, 0]                                                                                  
['K', 0, 0]                                                                                
['K', 0, 0]

我的预期输出是:

[0, 0, 0]                                                                                  
['K', 0, 0]                                                                                
[0, 0, 0]

【问题讨论】:

  • 列表是可变的。为什么你期望x 在你运行一个改变它的函数后保持不变?

标签: python list function variables assign


【解决方案1】:

您实际上并没有创建两个列表。 t 只是复制对列表x 的引用。因此,您正在重新分配原始列表中的值。听起来您想要一份列表副本并在新列表上重新分配值?如果是这样,请更改此行:

t=test(x.copy())

【讨论】:

    【解决方案2】:

    Python 中的所有参数(参数)都是通过引用传递的。这意味着如果您更改函数中参数所指的内容,更改也会反映在调用函数中。

    【讨论】:

    • 并非总是...本文提供了一个介绍,在哪些情况下函数的更改会反映给调用者:geeksforgeeks.org/is-python-call-by-reference-or-call-by-value
    • python 不通过值传递参数:全部通过引用。但你是对的......python也有两种类型的对象:不可变和可变
    • 这个苹果只列出来吗?我对单个变量进行了同样的尝试,它按预期工作
    • 还有sets, dicts and bytearraysint, string, float, long, str, tuple 等单个变量是不可变对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2021-07-21
    相关资源
    最近更新 更多