如何在Python函数中传递变量?

How variables are passed in a Python function?

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

如果我在python 2.7中运行以下代码,我会得到A和B的[2,2,2]打印。为什么B和A一起更改?多谢!

1
2
3
4
5
6
7
8
9
10
def test_f(x):
    a = np.zeros(3)
    b = a
    for i in range(3):
        a[i] += x
    print a
    print b
    return 0

test_f(2)


因为ba在内存中指的是同一个列表。b = a没有创建a的新副本。试试看区别:

1
2
3
4
5
6
7
8
9
10
def test_f(x):
    a = np.zeros(3)
    b = a.copy()
    for i in range(3):
        a[i] += x
    print a
    print b
    return 0

test_f(2)

b = a.copy()将创建一个与a的元素完全相似的新副本,而b=a只是创建一个对现有列表的新引用。


numpy将使用指针进行复制,除非您另有说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np

def test_f(x):
    a = np.zeros(3)
    b = np.copy(a)
    for i in range(3):
        a[i] += x
    print a
    print b
    return 0

test_f(2)

[ 2.  2.  2.]
[ 0.  0.  0.]