当前位置: 首页> 技术文章> python之深浅拷贝

python之深浅拷贝

python中深浅拷贝

先弄懂下面概念

变量 --引用--对象--(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝)

变量是一个系统表的元素,拥有指向对象的链接的空间

对象是被分配的一块内存,存储其所代表的值

引用是自动形成的从变量到对象的指针

在python中不可变对象知:一旦创建就不可修改对象,包括字符创,元组,数字

在python中可变对象是指:可以修改的对象,包括:列表,字典

1.不可变对象的赋值

a的值发生改变,b不会跟着改变

a = 1

b = a

print(a)

print(b)

a  = 3

print(a)

print(b)


结果:

1

1

3

1

2.可变对象的赋值

a发生改变,b也跟着改变

a = [1,2]

b = a

print(a)

print(b)

a[0] = 3

print(a)

print(b)



结果:

[1, 2]

[1, 2]

[3, 2]

[3, 2]

要想b的值不会改变,就要用到copy模块

3.深浅拷贝

浅拷贝:只拷贝顶级的对象,或者说:父级对象

深拷贝:拷贝所有对象,顶级对象以及嵌套对象。或者说:父级对象以及子对象

import copy


#第二种,字典中有嵌套

d = {'name':{'first':'zhang','last':'derek'},

    'job':['IT','HR']}

c1 = copy.copy(d)

c2 = copy.deepcopy(d)

print(id(d),id(c1),id(c2))    #31157416 31940256 35946856


d['job'][0] = 'tester'

print(d,c1,c2)

# {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']}

# {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']}

# {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['IT', 'HR']}


源对象修改值的时候,浅拷贝的值跟着改变,深拷贝的值没变

import copy


#第二种,字典中有嵌套

d = {'name':{'first':'zhang','last':'derek'},

    'job':['IT','HR']}

c1 = copy.copy(d)

c2 = copy.deepcopy(d)

print(id(d),id(c1),id(c2))    #31157416 31940256 35946856


d['job'][0] = 'tester'

print(d,c1,c2)

# {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']}

# {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['tester', 'HR']}

# {'name': {'first': 'zhang', 'last': 'derek'}, 'job': ['IT', 'HR']}


源对象修改值的时候,浅拷贝的值跟着改变,深拷贝的值没变


上一篇: ddt结合Python做UI自动化读取EX文件内容

下一篇: 软件测试之手工测试人员如何转测试开发?

QQ技术交流群

多测师官方学习交流
556733550

加入群聊