更多课程 选择中心


Python培训

400-996-5531

Python 复制,浅复制,深复制


首先来看一段代码:

代码1

list1= [1,2,3,4]

list2 = list1

list1.append(5)

print list2 #结果[1, 2, 3, 4, 5]

这是为什么呢? 我只改了list1,为什么list2也跟着改变了呢?

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用.

有人不禁会问,为什么字符串赋值后,再更改,不会发生着种情况,答案是字符串是不可变的,你更改了等于重写引用的其他的内存地址,c程序员立刻想到了指针..

我们也可以用id()内置函数查看对象的内存地址

直接的赋值,原始对象改变,被复赋值的对象也随之改变,如文章开始的代码1

那么如何才能达到我们想要的结果呢

浅复制

不会复制子对象

import copy

list1 = [1,2,3,4,["a","b"]]

list2 = copy.copy(list1)

list1.append(5)

print list2 #[1, 2, 3, 4, ['a', 'b']] 未改变

list1[-2].append("c") #更改["a","b"]

print list2 #[1, 2, 3, 4, ['a', 'b', 'c']]被改变

深复制

子对象也会连同复制

import copy

list1 = [1,2,3,4,["a","b"]]

list2 = copy.deepcopy(list1)

list1.append(5)

print list2 #[1, 2, 3, 4, ['a', 'b']] 未改变

list1[-2].append("c") #更改["a","b"]

print list2 #[1, 2, 3, 4, ['a', 'b']] 依然未改变

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:python书籍推荐:《深入浅出深度学习:原理剖析与Python实践》
下一篇:Python:关于高效使用字典的清单

2021年Python全套免费视频教程在哪里?

Python编程学习路线

Python最高有几级?

人工智能与语音遥控的区别?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省