Python按引用问题调用

时间:2016-07-20 02:24:15

标签: python python-3.x

正如我在python上所理解的那样,当你在函数参数上传递一个变量时,它已经引用了原始变量。在我的实现中,当我尝试将我传递给函数的变量等同时,它产生了空列表。

这是我的代码:

private void pictureBox1_Click(object sender, EventArgs e)

我是否遗漏了某些内容,或者是否通过引用误解了python调用的想法?

2 个答案:

答案 0 :(得分:1)

Python不是通过引用传递的。它是传递对象。

考虑以下两个功能:

def f(mylist):
    mylist = []

def g(mylist):
    mylist.append(1)

现在让我们打电话给他们。

mylist = [1]
f(mylist)
print(mylist)

mylist = [1] # reset the list
g(mylist)
print(mylist)

输出是什么?

如果Python 按值传递,则函数将获取列表的副本,因此一旦退出函数,修改它将不会影响原始列表。因此,在这两种情况下,您都将打印原始列表[1]

如果Python是传递引用,则函数将接受对对象的引用并修改它将修改引用引用的实际对象,因此第一个输出将是{{1第二个,[]

如果运行此示例,您会发现第一个输出为[1,2](如果未受影响,则为列表),第二个输出为[1](列表受影响)。

<强> O_O

执行[1,2]时,Python正在构建对象new_temp_obj = obj[:],并将其命名为obj[:]

如果你是new_temp_obj,Python会寻找名为append的东西,并为其添加元素。您传入的参数告诉它在哪里查找列表。

您正在内存中的全新位置创建一个全新的对象,只需给它指定相同名称new_temp_obj

答案 1 :(得分:1)

new_temp_obj = obj[:] #copying the remaining element 

这会使new_temp_obj引用另一个新的列表对象。您可以使用id查看其id更改此作业。

将其更改为:

new_temp_obj[:] = obj[:]

你会看到你的预期结果。