python没有像C++的指针操作,不能自己指定值传递或者引用传递。

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
def test():
class A:
def __init__(self, posn):
self.posn = posn

def get_posn(self):
return self.posn

def update_posn(self):
self.posn[0] += 1

class B:
def __init__(self, posn):
self.posn_b = posn

def get_posn(self):
return self.posn_b

a = A([2, 2, 2])
posn = a.get_posn()
b = B(posn)
a.update_posn()
print(a.get_posn())
print(b.get_posn())

最后输出的结果为

1
2
[3, 2, 2]
[3, 2, 2]

可以看出,像 posn 这种数组,无论是从一个类中读取,还是用来初始化另一个类,默认的都是引用传递。

如果希望使用值传递,可以类似如下操作,比如对 class B 进行改动

1
2
3
4
5
6
class B:
def __init__(self, posn):
self.posn_b = copy.deepcopy(posn)

def get_posn(self):
return self.posn_b

此时最终输出结果为:

1
2
[3, 2, 2]
[2, 2, 2]