Python培训
美国上市Python培训机构

400-111-8989

热门课程

Python 复制,浅复制,深复制

  • 发布:Python培训
  • 来源:知识
  • 时间:2017-08-22 16:11

首先来看一段代码:

代码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:关于高效使用字典的清单

Python培训线上和线下的区别

不懂pandas,你怎么Python语言进行机器编程​?

了解Python语言的2D绘图库​Matplotlib,才能绘制出专业图像!

Python培训干货分享|不可不知的Python 爬虫工具

选择城市和中心
贵州省

广西省

海南省