Python 浅拷贝和深拷贝 - Python零基础入门教程

目录

  • 一.Python 浅拷贝和深拷贝前言
  • 二.Python 普通的变量赋值
  • 三.Python 浅拷贝和深拷贝
    • 1.Python 浅拷贝 copy
    • 2.Python 深拷贝 deepcopy
    • 3.Python 浅拷贝和深拷贝区别
  • 四.猜你喜欢

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

一.Python 浅拷贝和深拷贝前言

何谓浅拷贝/深拷贝,说得直白一点,其实就是数据拷贝,两者到底有什么区别呢?听着就挺迷糊的,Python 开发项目的时候说不定你就能碰上这样的坑;

二.Python 普通的变量赋值

我们平常使用的变量赋值就是浅拷贝,即两个变量共享同一个内存块,相同的内存地址,一旦值发生改变,另外一个变量的值也会跟随着一起变化,演示代码如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 浅拷贝和深拷贝.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""list1 = [1,2,3,4,5]
# 普遍的变量赋值
list2 = list1
print(id(list1))
print(id(list2))# 修改列表list2的数据
list2.append(123)
print(list1)
print(list2)'''
输出结果:
2251297055368
2251297055368
[1, 2, 3, 4, 5, 123]
[1, 2, 3, 4, 5, 123]'''

注意:常规的变量赋值共享一个内存块,内存地址相同,一旦值发生改变,共享同一个内存地址的所有变量值都会发生改变,可以直接通过内置函数 id 对比下内存地址即可!

三.Python 浅拷贝和深拷贝

在 Python 开发过程中,有些时候对于上面的情况并不是我们想要的,我们更加希望对赋值后的变量做修改并不影响原始变量的值,如何实现呢?这里就需要介绍一下 copy 模块:

copy.copy – 浅拷贝,重新分配内存,只拷贝父对象,不会拷贝对象的内部的子对象;

copy.deepcopy – 深拷贝,重新分配内存,拷贝对象及其所有子对象;

1.Python 浅拷贝 copy

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 浅拷贝和深拷贝.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""import copy
spam = ['A', 'B', 'C', 'D']
# 使用浅拷贝
cheese = copy.copy(spam)
cheese[1] = 42
print(id(spam),spam)
print(id(cheese),cheese)'''
输出结果:
57205555 ['A', 'B', 'C', 'D']
57208888 ['A', 42, 'C', 'D']
'''

2.Python 深拷贝 deepcopy

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 浅拷贝和深拷贝.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""import copy
spam = ['A', 'B', 'C', 'D']
# 使用深拷贝
cheese = copy.deepcopy(spam)
cheese[1] = 42
print(id(spam),spam)
print(id(cheese),cheese)'''
输出结果:
57205555 ['A', 'B', 'C', 'D']
57208888 ['A', 42, 'C', 'D']'''

3.Python 浅拷贝和深拷贝区别

** 对于常规的字典 dict 或者列表 list 使用 copy 模块的深拷贝或者浅拷贝,两者并没有区别!**如果字典或者列表中还有包含有子类的话,使用 copy 模块的深拷贝和浅拷贝的话,结果就大不相同了:

copy.copy — 重新分配内存,只拷贝父对象,不会拷贝对象内部的子对象;

copy.deepcopy — 重新分配内存,拷贝对象及其所有子对象;

示例代码如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 浅拷贝和深拷贝.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""import copyprint("使用浅拷贝:")
spam = [['A','E'], 'B', 'C', 'D']
# 使用浅拷贝
cheese = copy.copy(spam)
cheese[0][0] = 42
print(id(spam),spam)
print(id(cheese),cheese)
print("***"*20)print("使用深拷贝:")
spam = [['A','E'], 'B', 'C', 'D']
# 使用深拷贝
cheese = copy.deepcopy(spam)
cheese[0][0] = 42
print(id(spam),spam)
print(id(cheese),cheese)'''
输出结果:
使用浅拷贝:
2179653046408 [[42, 'E'], 'B', 'C', 'D']
2179653046920 [[42, 'E'], 'B', 'C', 'D']
************************************************************
使用深拷贝:
2179653086728 [['A', 'E'], 'B', 'C', 'D']
2179653046408 [[42, 'E'], 'B', 'C', 'D']'''

由此可见:

** 如果列表或者字典没有包含子列表或者子字典的话,使用深拷贝或者浅拷贝效果都有一样;**

** 如果列表或者字典中存在子类的时候,只有深拷贝才会为所有的子类也重新分配内存,而浅拷贝只负责父对象,不考虑子对象!!**

四.猜你喜欢

  1. Python 配置环境
  2. Python 变量
  3. Python 运算符
  4. Python 条件判断 if/else
  5. Python while 循环
  6. Python break
  7. Python continue
  8. Python for 循环
  9. Python 字符串
  10. Python 列表 list
  11. Python 元组 tuple
  12. Python 字典 dict
  13. Python 条件推导式
  14. Python 列表推导式
  15. Python 字典推导式

未经允许不得转载:猿说编程 » Python 浅拷贝和深拷贝

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTF工具-seccomp-tools

seccomp-tools可以分析程序的seccomp状态,哪些被系统被禁用了安装 安装流程: sudo apt install gcc ruby-dev gem install seccomp-tools 之后便可直接分析程序的seccomp状态

Cloud一分钟 | 谷歌关闭社交平台;亚马逊云服务拿下10亿美元订单,劲敌微软败走麦城...

Hello,everyone:10月11日早,星期四,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

mino文件服务器删除文件,Spring-minio

Spring-minioMinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小&#…

Python 递归函数 - Python零基础入门教程

目录 一.Python 递归函数案例 1.Python 递归函数案例一2.Python 递归函数案例二3.Python 递归函数案例三 二.Python 递归函数总结三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一个函数在函数体内部调用自己,这样的函数称为…

Cloud一分钟 | 云存储服务商​Egnyte获7500万美元E轮融资,高盛领投

Hello,everyone:10月12日早,星期五,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

为什么阿里飞猪、滴滴、携程都被质疑滥用大数据杀熟?

技术本无罪,用的人多了,自然成为掩盖人性罪恶的根源。支撑「互联网」时代的大数据是如何一步一步沦落成利益的刽子手的?2018 年,「大数据杀熟」一词开始进入大众视野,且在互联网领域掀起了腥风血雨。近日,更…

电脑服务器传文件夹吗,服务器和电脑传文件夹吗

服务器和电脑传文件夹吗 内容精选换一换Model File:模型文件。单击右侧的文件夹图标,在后台服务器sample所在路径(工程目录/run/out/test_data/resnet-18/model)选择需要转化的模型对应的*.prototxt文件,并上传。Weight File:权重文件。请自行从https://…

BugkuCTF-MISC题1和0的故事

基础知识: PIL PIL是Python Imaging Library,它为python解释器提供了图像编辑功能。 PIL.Image.new()方法通过给定的模式和大小创建一个新图像。尺寸以(width,height)-tuple,以像素为单位。对于单波段图像,颜色作为单个值给出,对…

Python time 模块 - Python零基础入门教程

目录 一.前言二.Python time 模块常用函数介绍三.Python time 模块使用 1.Python time 模块获取时间2.Python time 模块自定义时间格式3.Python time 模块查看代码执行时间 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 Python time 模…

面趣 | 这道微软面试题你会吗?

参加 2018 AI开发者大会,请点击 ↑↑↑问面试题目:两个单词如果包含相同的字母,次序不同,则称为字母易位词(anagram)。例如,“silent”和“listen”是字母易位词,而“apple”和“aplee”不是易位词。请定义…

BugkuCTF-MISC题baby_flag.txt

下载附件得到一个压缩包baby_flag.zip 打开得到baby_flag.txt,直接点击打开发现乱码 通过010editor打开观察发现这是一个图片文件 将文件后缀改为.jpeg得到一张图片 通过binwalk -e …未分离出有价值的信息 在010editor发现有RAR压缩包的头 将这一部分数据复制…

云漫圈 | 计数排序,你真的了解么?

参加 2018 AI开发者大会,请点击 ↑↑↑————— 第二天 —————————————————假定20个随机整数的值如下:9,3,5,4,9,1,2,7,8,1&…

BugkuCTF-MISC题blind_injection

下载附件 方法一: 下载用wireshark打开 题目说的是盲注,而注入一般都是走的http,直接导出http对象,再根据大小排序 得到flag 方法二: 若HTTP对象列表点击大小无反应 将其导出,命名为output 在文件夹里查…

ubuntu服务器ssh登录密码修改,Ubuntu-18.04 下修改root用户密码,安装SSH服务,允许root用户远程登录,安装vsftp服务器...

修改root用户密码打开终端,输入 sudo passwd root 指令:安装SSH服务ssh默认端口号是22,可以在/etc/ssh/sshd_config文件中修改查看服务器否开启:netstat -tlp启动服务:sudo /etc/init.d/ssh start重启服务:…

Python json模块 - Python零基础入门教程

目录 一.前言二.python json 模块常用函数三.json 转 Python 字典 dict四.Python 字典 dict 转 json五.关于 json.dump 和 json.load六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.前言 JSON 的全称是 JavaScript Object Notation&…

Cloud一分钟 | 英国发布大规模遗传数据;德国电信与华为联合发布PLAS云连接服务...

Hello,everyone:10月15日早,星期一,祝大家工作愉快!一分钟新闻时间:★ 百度云与智慧农业的头部企业强强联合,共建ABC智能农业生态。★ 德国电信与华为联合发布PLAS云连接服务。★ 英国发布大规模…

“汉堡+奶昔”怎么就成了精致生活的热门标签?

图片来源:视觉中国文章来源:DT财经“左手汉堡,右手奶昔,这是新天地Coco的时髦新日常。最近沪上刮起一阵打卡新风潮,汉堡竟然成了标记城市美好生活的一大利器。还在纠结晚餐去金拱门还是汉堡王的DT君,发现自…

揭开互联网公司的神秘面纱,数据解读那些slay整个行业的互联网公司

前言:随着互联网行业的日益兴盛,吸引力越来越多的牛人加入其中,也有许多小伙伴跃跃欲试,想要在互联网的浪潮中大展身手。今天我们通过看准网的数据,帮助大家对各大互联网公司有一个比较概括的了解。01.数据来源看准网提…

Cloud一分钟 | Gartner发布2018年第二季度全球服务器市场报告;中信银行联合腾讯云推出手机银行智能语音产品...

Hello,everyone:10月16日早,星期二,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

Cloud一分钟 | 华为云发布云数据安全白皮书;OPPO携手阿里云举行天池OGeek算法挑战赛...

Hello,everyone:10月17日早,星期三,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…