美文网首页
Python的深拷贝与浅拷贝

Python的深拷贝与浅拷贝

作者: 段家大少xi | 来源:发表于2017-07-16 20:30 被阅读0次

先谈浅拷贝:

浅拷贝拷贝的是地址引用,可以找到共同的内容,原文件内容修改,拷贝的那份也会修改。

例子:

a = [1,2,3]

b = a

print(id(a))

print(id(b)--------他们两个的地址是相同的,内容也是一样的

a.append(4)

print(a)

print(b)-------a添加了4,b也会跟着变化。

再谈深拷贝:

深拷贝的内容一样,但是地址不一样,就算是一方文件修改,另外一方不会变化。

b  = copy.deepcopy(a)

b得到的内容与a的内容完全是一样的,但是地址不会一样,就算是a中有对象引用,b中对应的引用的对象依然是内容一样,地址不一样

import copy

a = [1,2,3,4]

b = copy.deepcopy(a)

print(id(a))

print(id(b))

a.append(5)

print(a)

print(b)

注意:如果是一个不可变的对象(内部存储还是不可变对象),那时候就是浅拷贝,得到的地址也是一样的

a = (1,2,3,4)

b = copy.deepcopy(a)

print(id(a))

print(id(b))

print(a)

print(b)

copy.copy()这个函数结果会因为是可变的或则是不可变的而导致结果不同  只能拷贝一层。根据类型有关。若果是列表,就是深拷贝,若果是元组,就是浅拷贝,如果是有嵌套,浅拷贝。

可变的时候是深拷贝:

a = [1,2,3,4]

b = copy.copy(a)

print(id(a))

print(id(b))

a.append(5)

print(a)

print(b)

不可变的时候是浅拷贝:

a = (1,2,3,4)

b = copy.copy(a)

print(id(a))

print(id(b))

相关文章

网友评论

      本文标题:Python的深拷贝与浅拷贝

      本文链接:https://www.haomeiwen.com/subject/milxkxtx.html