Python 的赋值和复制
在前边做的一个项目中 ,遇到一个很“奇怪”的问题a = {'a':'a1','b':'b1'}
b = a
b['c'] = 'c1'
print 'a = '.a
print 'b = '.b
结果:
a ={'a': 'a1', 'c': 'c1', 'b': 'b1'}
b ={'a': 'a1', 'c': 'c1', 'b': 'b1'}
原来python采用的是引用变量的结构,也就说如果你对一个变量赋值,并不是给这个变量开辟了一块内存空间而是将一个对象的内存空间地址告诉了这个变 量,这样做的好处是便于管理,节省内存空间,便于内存释放等等。
但是在一些特殊情况下还是需要一个有自己内存空间的变量,这样操作起来和原变量互不干扰。 那就要用到对象的复制了
标准库中的copy模块提供了两个方法来实现拷贝
copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象
deepcopy 深拷贝 拷贝对象及其子对象
import copy
a = {'a':'a1a1','b':['a','b']}
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a['b'].append('c')
a['c'] = 'c1'
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
结果:
a ={'a': 'a1a1', 'c': 'c1', 'b': ['a', 'b', 'c']}
b ={'a': 'a1a1', 'c': 'c1', 'b': ['a', 'b', 'c']}
c ={'a': 'a1a1', 'b': ['a', 'b', 'c']}
d ={'a': 'a1a1', 'b': ['a', 'b']}
当然我们也可以使用其他方式如:
b = {}
a = {'a':'a1','b':'b1'}
for item in a:
b = a
a['c'] = 'c1'
print a
print b
结果:
{'a': 'a1', 'c': 'c1', 'b': 'b1'}
{'a': 'a1', 'b': 'b1'}
或者更简单的方法:
b = {}
a = {'a':'a1','b':'b1'}
b = dict(a)
a['c'] = 'c1'
print 'a = ',a
print 'b = ',b
结果:
{'a': 'a1', 'c': 'c1', 'b': 'b1'}
{'a': 'a1', 'b': 'b1'}
页:
[1]