Python变量的赋值与拷贝
之前要对一个list对象进行操作,为了保留原始对象值,所以进行了简单赋值,打印出来发现两个变量同时变了~
>>> lst = [1,2,3] >>> lst [1, 2, 3] >>> org_lst = lst >>> org_lst [1, 2, 3] >>> lst.pop() 3 >>> lst [1, 2] >>> org_lst [1, 2] >>>
显然要复制一个可变对象的副本,简单的赋值是行不通的。这跟PHP还是有区别的,不小心踩了一个坑~ 经过查找资料,发现Python提供了一个copy模块,是专门用于可变对象的复制的。 copy中有两个方法:浅拷贝copy.copy() 和 深拷贝copy.deepcopy(),下面举个例子:
>>> import copy >>> lst [1, 2, 3] >>> org_lst = copy.copy(lst) >>> lst.append(4) >>> lst [1, 2, 3, 4] >>> org_lst [1, 2, 3]
以上是浅拷贝,通过copy副本就不随原对象改变了,如果要拷贝深度对象,就需要用到深拷贝deepcopy(),看个例子:
>>> a = [[1,2], [3,4]] >>> b = copy.copy(a) >>> c = copy.deepcopy(a) >>> print a,b,c [[1, 2], [3, 4]] [[1, 2], [3, 4]] [[1, 2], [3, 4]] >>> a[0][1] = 5 >>> print a,b,c [[1, 5], [3, 4]] [[1, 5], [3, 4]] [[1, 2], [3, 4]]
以上对比可以发现,当a的内部对象变更之后,通过copy()浅拷贝内部对象也跟着变了,而通过deepcopy()则是保持原始值。