iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深浅copy
  • 684
分享到

深浅copy

深浅copy 2023-01-30 23:01:12 684人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

一. 赋值运算 1 s1 = [1, 2, 3, ["barry", "alex"]] 2 s2 = s1 3 4 s1[0] = 111 5 print(s1) # [111, 2, 3, ['barry', 'alex']]

一. 赋值运算

1 s1 = [1, 2, 3, ["barry", "alex"]]
2 s2 = s1
3 
4 s1[0] = 111
5 print(s1)    # [111, 2, 3, ['barry', 'alex']]
6 print(s2)    # [111, 2, 3, ['barry', 'alex']]
7 
8 s1[3][0] = "abc"
9 print(s1)    # [111, 2, 3, ['abc', 'alex']]
10 print(s2)    # [111, 2, 3, ['abc', 'alex']]
11 
12 s2[1] = "askj"
13 print(s1)    # [111, 'askj', 3, ['abc', 'alex']]
14 print(s2)    # [111, 'askj', 3, ['abc', 'alex']]
15 
16 # 由上面两个示例得知, 两个列表指向的是同一个内存地址
17 # 所以它们是完全一样的,其中一个列表内元素的改变会导致另一个列表的改变

二. 浅拷贝 copy

1 s3 = [1, "拷贝", True, (1, 2, 3), [123, "ak"]]
2 s4 = s3.copy()
3 
4 print(id(s3), id(s4))
5 # 2862385252936  2862385260296   id 不一样
6 
7 print(id(s3[1]), id(s4[1]))
8 # 2862384610800  2862384610800   id 一样
9 
10 print(id(s3[-1])), id(s4[-1])
11 # 2862385259720  2862385259720   id 一样
12 
13 print(id(s3[-2])), id(s4[-2])
14 # 2862385086400  2862385086400   id 一样
15 
16 # 发现列表 s3 和 s4 在内存中指向不同的地址
17 # 但是它们同一个索引位置的元素指向内存中同一个地址
18 # 说明新列表中的元素与原列表中的元素是公用的
19 # 
20 # 浅 copy 只是 copy 了一个外壳
21 
22 a = [1, "da", [22, 33]]
23 b = a.copy()
24 a[-1].append(44)
25 print(b)    # [1, "da", [22, 33, 44]]
26 
27 # 但是记住 a 和 b 的 id 是不一样的!
27 # 因此对其中一个列表的增删改查不会影响另一个列表的元素
28 # 比如接着上面
29 a.append(33)
30 print(a)    # [1, "da", [22, 33,44], 33]
31 print(b)    # [1, "da", [22, 33, 44]]
32 # 注意 a.append(33) 与 a[-1].append(44) 的区别!
33 # 一个是给列表添加元素,另一个是给列表中的元素(即列表)里添加一个元素
34
35
37 # 这里涉及到切片的相关知识
38 l1 = [1, 2, 3, [22, 33]]
39 l2 = l1[::]
40 l1[-1].append(666)
41 print(l2)   # [1, 2, 3, [22, 33, 666]
42 # 这说明对列表创建一个副本是 浅copy!

三. 深拷贝 copy

1 import copy
2 
3 s5 = [3, True, "ask", (1, 2, 3), [34, "as"]]
4 s6 = copy.deepcopy(s5)
5 
6 print(id(s5), id(s6))  
7 # 2862386662664  2862386819848
8 
9 print(id(s5[0]), id(s6[0]))  
10 # 1409182528  1409182528
11 
12 print(id(s5[-1]), id(s6[-1]))  
13 # 2862386662600  2862386819912
14 
15 print(id(s5[-2]), id(s6[-2]))  
16 # 2862385217680  2862385217680
17 
18 # 对于深copy,列表是在内存中重新创建的。
19 # 列表中可变的数据类型是重新创建的,列表中的不可变数据类型是公用的

注意:

1、深浅copy的补充
a = [1, 2, [33, 44]]

b = [1, 2, [33, 44]]  # 新建一个所有元素相同的列表是  深copy
c = [::]  # 全切一个列表得到的列表是  浅copy
2、虽然深浅copy,两个对象的不可变数据类型元素id都相同,但是修改其中一个对象的不可变数据类型元素,并不会影响另一个对象相同id元素的值。
# 浅copy
l1 = [1, 'alex', [11,22]]
l2 = l1.copy()
l1[0] = 1000
print(l1)  # [1000, 'alex', [11, 22]]
print(l2)  # [1, 'alex', [11, 22]]
# 深copy
import copy
l1 = [1, 'alex', [11,22]]
l2 = copy.deepcopy(l1)
l1[0] = 1000
print(l1)  # [1000, 'alex', [11, 22]]
print(l2)  # [1, 'alex', [11, 22]]

面试题

# 求l2的打印结果?
l1 = [1,2,3,[22,33]]
l2 = l1[::]
l1[-1].append(666)
print(l2)
# 打印结果为:
[1, 2, 3, [22, 33, 666]]

# 全切得到的列表是对原列表的浅copy
print(id(l1[0]), id(l2[0]))  # 不可变数据类型元素的id一样
print(id(l1[-1]), id(l2[-1]))  # 可变数据类型元素的id一样

--结束END--

本文标题: 深浅copy

本文链接: https://www.lsjlt.com/news/181020.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 深浅copy
    一. 赋值运算 1 s1 = [1, 2, 3, ["barry", "alex"]] 2 s2 = s1 3 4 s1[0] = 111 5 print(s1) # [111, 2, 3, ['barry', 'alex']]...
    99+
    2023-01-30
    深浅 copy
  • Python深浅copy
    深copy和浅copy 深copy:不仅copy变量的指针,还copy指针指向的数据 这里需要提到一个新名词,指针:变量和内存中数据的一种引用关系。变量通过指针对应到内存中的数据 在列表、元组、字典、集合中可以使用深copy li...
    99+
    2023-01-31
    深浅 Python copy
  • python3之深浅copy对比
    一、赋值对比1、列表l1 = [1,2,3] l2 = l1 l1.append('a') print(l1,l2)               #[1, 2, 3, 'a'] [1, 2, 3, 'a'] print(id(l1),id(...
    99+
    2023-01-31
    深浅 copy
  • JavaScript中的深拷贝(deep copy)和浅拷贝(shallow copy)
    聚沙成塔·每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造...
    99+
    2023-10-19
    javascript 开发语言 ecmascript
  • python-浅拷贝(copy)与深拷贝(deepcopy)
    一:对象与元素、可变与不可变:        (1)对象:对象有存储地址id【就好像某个地址的快递仓库】,对象中的元素都有一个地址id【就像仓库的某某货架】        (2)对象与对象的元素:(对象)或(对象中的元素)有不同的类型【数字...
    99+
    2023-09-03
    数学建模
  • 图解Python中浅拷贝copy()和深拷贝deepcopy()的区别
    关于浅拷贝和深拷贝想必大家在学习中遇到很多次,这也是面试中常常被问到的问题,借由这个时间,整理一下浅拷贝和深拷贝的关系 先从一个简单的例子入手吧 定义一个数组的嵌套结构 a = [1...
    99+
    2023-05-19
    Python 浅拷贝copy() Python 深拷贝deepcopy()
  • Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
    程序中常常需要复制一个对象, 按思路应该是这样的 a = [1, 2, 3] b = a # [1, 2, 3] print b 已经复制好了,但是现在得改变一下第一个元素的值把它改成5 ...
    99+
    2022-06-04
    模块 操作 方法
  • 深入浅析AngularSSR
    目录使用 SSR 的好处对 SEO 更加友好提高移动端的性能更快地展示首页为项目增加 SSR替换浏览器 API使用 URL 绝对地址Prerender 预渲染静态 HTML预渲染路径...
    99+
    2022-11-13
    Angular SSR Angular SSR好处 Angular SSR用法
  • day07 深浅拷贝
    基础数据的补充 1. join: 把列表中的数据进行拼接。 拼接成字符串 # 字符串转化成列表:  split() # 列表转化成字符串:join()  2. 关于删除:       列表和字典在循环的时候都不能删除。       把...
    99+
    2023-01-30
    深浅
  • 深入浅出MongoDB
                              ...
    99+
    2022-10-18
  • Python深浅拷贝
    深浅拷贝深浅拷贝分为两部分,一部分是数字和字符串另一部分是列表、元组、字典等其他数据类型。数字和字符串对于数字和字符串而言,赋值、浅拷贝和深拷贝无意义,因为他们的值永远都会指向同一个内存地址。# 导入copy模块>>> i...
    99+
    2023-01-31
    深浅 Python
  • 浅谈JavaScript浅拷贝和深拷贝
    目录一、直接赋值二、浅拷贝三、深拷贝1. JSON对象的方式2. 递归复制网上关于这个话题,讨论有很多了,根据各路情况我自己整理了一下,最后还是能接近完美的实现深拷贝,欢迎大家讨论。...
    99+
    2022-11-12
  • 深入浅析Java中对象的深复制与浅复制
    本篇文章为大家展示了深入浅析Java中对象的深复制与浅复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 Java对象深复制与浅复制实例详解我们在遇到一些业务场景的时候经常需要对对象进行复...
    99+
    2023-05-31
    java 对象 中对
  • 深入浅析MySQL Explain
    目录一、id二、select_type三、table四、type五、possible_keys六、Key七、key_len八、ref九、rows十、Extra在日常工作中,我们会有时会开慢查询去记录一些执行时间...
    99+
    2022-07-08
    MySQL Explain MySQL Explain详解
  • 深入浅析MySQL Explain
    目录一、id二、select_type三、table四、type五、possible_keys六、Key七、key_len八、ref九、rows十、Extra在日常工作中,...
    99+
    2022-11-13
  • 浅拷贝&深拷贝
    浅拷贝新的对象指向原来对象的地址 深拷贝新的对象中,原来是可变对象,会新复制一份值指向新的地址[11,22,33]若原来的对象里含有可变对象,里面的这个可变对象也会指向新的地址['qwer', 123, [44,55]] 参考:https...
    99+
    2023-01-30
  • python之深浅拷贝
    深浅拷贝对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。import copy# ######### 数字、字符串 #########n1 = 123# n1 = "age 10"print(id(n...
    99+
    2023-01-31
    深浅 python
  • python的深浅拷贝
    copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象。对于不可变对象而言,浅拷贝只是引用赋值。 deepcopy函数是深拷贝,对于可变类型,深拷贝是逐层进行拷贝。对于不可变类...
    99+
    2023-09-03
    python 开发语言
  • 浅谈MySQL之浅入深出页原理
    目录一、页的概览二、Infimum 和 Supremum三、使用Page Directory四、页的真实面貌4.1、File Header4.2、Page Header4.3、Infimum & Suprem...
    99+
    2022-05-19
    MySQL 页原理
  • 深入浅出JS的Object.defineProperty()
    目录前言对象的定义与赋值Object.defineProperty()语法说明属性的特性以及内部属性属性描述符数据描述符 --特有的两个属性(value,writable)存取描述符...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作