关于python:通过引用传递可变对象?

pass by reference for mutable object?

本问题已经有最佳答案,请猛点这里访问。

初始化变量aba的id=559599568,b的id=559251864。

然后在函数change()中将b赋给a,期望a指向b的位置,a具有b的值。

但是,我发现a确实指向了b在函数中的位置(如您所见,当在函数内部打印时,它们的ID都为559251864),但是一旦函数返回,a就会指向它的原始ID,即559599568。

为什么a一返回就指向它原来的内存ID?我以为Python是通过引用传递的,如果它是可变对象?请纠正我。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
a = pd.DataFrame(range(3))
b = pd.DataFrame(range(5))
def change(origin,new):
    print id(origin)
    print id(new)
    origin = new
    print id(origin)
    print id(new)
change(a,b)

Out[24]: change(a,b)
559599568
559251864
559251864
559251864
a
Out[25]:
   0
0  0
1  1
2  2
b
Out[26]:
   0
0  0
1  1
2  2
3  3
4  4
id(a)
Out[27]: 559599568L
id(b)
Out[28]: 559251864L


是的,Python正在传递对对象的引用(通过共享调用)。但你的任务origin = new也在分配参考。因此,这使得originnew在函数范围内引用同一对象,但不会改变函数之外的任何内容。