Python列表赋值拷贝,浅拷贝,深拷贝的区别

赋值拷贝又称引用拷贝

本质是创建一个指向被拷贝列表的引用,他们使用的是同一块内存区域,因为无论更改其中任何一个变量,我们被拷贝的变量也会跟着改变。简单的来说,赋值拷贝,无论把列表赋值给多少个变量,这些变量指向的都是同一个列表.如下面的例子,创建一个列表list1,将list1赋值给list3,然后给list3添加一个元素9,打印list3和list1,list3增加了一个元素9,list1也增加了一个元素9.打印他们的内存地址id,id是一样的.

```

list1 = [1, 2, 3, 4]

list3 = list1

list3.append(9)

print(list3)

print(list1)

print(id(list1))

print(id(list3))

```

浅拷贝

浅拷贝:浅拷贝是一维内存拷贝【不完全拷贝】,对于多维的列表,还会有内存公用的情况。

如下面的例子,创建一个二维列表list2,将list2拷贝给list4,先打印list4,与list2的内容一样;在list4

的一为列表下标为0的位置插入元素"b",list2的二维列表末尾添加元素"a",然后打印list4,与list2,

发现list2中的一为列表没有发生变化,在二维列表的末尾也添加了一个元素"a",这就是多维列

表内存公用的情况.

```

list2=[1,2,3,[7,8,9]]

list4=list2.copy()

print(list4)

list4.insert(0,"b")

list4[-1].append("a")

print(list4)

print(list2)

```

深拷贝

深拷贝:完全内存拷贝,将多维列表中的内容递归的复制一遍,重新存储到一块新的内存空间

因此在深拷贝不会出现内存公用的情况。深度拷贝需要导入copy模块,如下面例子,将list2拷贝给

list5,在list5中下标为0的位置插入"b",二维列表末尾添加a,打印结果,只有list5发生了变化,list2 并

没有发生变化.这就是深度拷贝,完全拷贝.

```

import copy

list2 = [1, 2, 3, [7, 8, 9]]

list5 = copy.deepcopy(list2)

list5[-1].append("a")

list5.insert(0, "b")

print(list5)

print(list2)

```


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、list列表 1.概述 变量:使用变量存储数据,但是,缺点:一个变量每次只能存储一个数据思考:如果一次性存储多...
    hollow_02f9阅读 4,239评论 0 1
  • 列表序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字- 它的位置,或索引,第一个索引是0,第二...
    spyder_men阅读 4,170评论 0 0
  • 一、list列表 1.概述 变量:使用变量存储数据,但是,缺点:一个变量每次只能存储一个数据思考:如果一次性存储多...
    墨雨love薏雪阅读 4,642评论 0 0
  • 1.git简介 git是一个分布式版本控制软件,最初由(Linus Torvalds)创作 2.git的优势 Gi...
    sofiiii阅读 1,616评论 0 0
  • 《宁静》 我只想在清浅的水岸边悄悄地含苞, 有三两荷叶相伴, 云舒云卷,云去云闲, 平凡的时光悠悠地过。 有风的日...
    不语不问阅读 1,369评论 0 3

友情链接更多精彩内容