Python中引用的问题
长久以来一直被这个问题困扰:
所谓引用就是看起来像赋值的东西,其实并没有复制出另外一份实例,而且共享同一个实例对象。
python中对于基本类型一般是复制,例如int,float,boolean三种类型
a = 3 b = a b = 4 print(a) // a == 3 a = 3.4 b = a b = 4.3 print(a) // a ==
3.4 a = True b = a b = False print(a) // a == True
另外文件、列表、字典三种类型都是
f = open(‘a.txt’,‘w’) g = f g.close() f.write(‘afdsaf’) // I/O write error f =
[1,2,3,4] g = f g[1] = 444 print(f) // [1,444,3,4] >>> f = {1:3} >>> g = f >>>
g[1] = 4 >>> f {1: 4}
另外值得注意的是传入的参数是值传入还是引用传入也是根据基本类型。
def x(l): l = 3 a = 4 x(a) print(a) // a == 4 a = [1,3,4,5] x(a) print(a) // a
== [1,3,4,5] def x(l): l[2] = 3 a = [1,3,4,5] x(a) print(a) // a == [1,3,3,5]
在python出现的每一个东东都是由基本类型构成,而不是c/c++中的值。
例如:
a = [1,2,3,5] // 这里不是赋值,这里a是基本类型[1,2,3,5]的引用 b = a // 这里b是[1,2,3,5]的另外一个引用 b =
[2,3,4] // b的引用变为[2,3,4],而a的还是[1,2,3,5]