正如我在python上所理解的那样,当你在函数参数上传递一个变量时,它已经引用了原始变量。在我的实现中,当我尝试将我传递给函数的变量等同时,它产生了空列表。
这是我的代码:
private void pictureBox1_Click(object sender, EventArgs e)
我是否遗漏了某些内容,或者是否通过引用误解了python调用的想法?
答案 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[:]
你会看到你的预期结果。