浅析Python中的赋值和深浅拷贝
发布时间 - 2026-01-11 02:47:26 点击率:次python中,A object = B object 是一种赋值操作,赋的值不是一个对象在内存中的空间,而只是这个对象在内存中的位置 。
此时当B对象里面的内容发生更改的时候,A对象也自然而然的会跟着更改。
name = ["root","admin"]
cp_name = name # 对cp_name进行赋值操作
# 对name列表进行插入
name.append('root_temp')
print(name,cp_name) # ['root', 'admin', 'root_temp'] ['root', 'admin', 'root_temp']
print(id(name),id(cp_name)) # 23991960 23991960
而想要进行浅拷贝或者深拷贝,就需要引入copy模块 。
首先来说下浅拷贝,当进行浅拷贝时,使用copy.copy()方法。
import copy
name = ["root","admin"]
# 进行浅拷贝操作
cp_name = copy.copy(name)
# 查看cp_name,name
print(name,cp_name) # ['root', 'admin'] ['root', 'admin'] 拷贝成功
#查看地址
print(id(name),id(cp_name)) # 21146920 21147160 内存地址并不相同
# 尝试对name进行更改
name.append('root_temp')
# 查看cp_name是否更改
print(cp_name) # ['root', 'admin'] 内容并没有更改
A = copy.copy(B) 此时A对象相当于把B对象中的内容给完成的拷贝了一份,存储在了一份新的内存地址当中。
其中有一点需要注意,如下:
import copy
name = ['root','admin',['root_temp','admin_temp']]
cp_name = copy.copy(name)
# 查看两个对象的地址
print(id(name),id(cp_name)) # 24358504 24428952 二者的地址并不相同
# 对name 进行更改
name.append('test')
# 查看cp_name是否更改
print(cp_name) # ['root', 'admin', ['root_temp', 'admin_temp']] cp_name并未更改
# 在来对name中的列表对象进行更改
name[2].append('ttttt')
print(cp_name) # ['root', 'admin', ['root_temp', 'admin_temp', 'ttttt']] 发现cp_name内容发生了变化
在上面的代码中,通过copy.copy()方法把name对象浅拷贝给了cp_name,此时二者的内容相同,但是地址不同,说明通过浅拷贝后,cp_name相当于重新开辟了一块内存空间用来存储拷贝过来的内容。所以说,当name.append()第一次插入值的时候,cp_name对象没有变化,因为cp_name和name 处于两个不同的内存空间,是独立的。
而浅拷贝的问题在于,只能够拷贝第一层的内容,至于说第二层以及第三层或者第n层,对于浅拷贝来说都是无能为力的,只能简单的拷贝一份内存地址。
所以说,对于name 这个对象中,列表第一层发生更改,是不会影响cp_name的,而一旦更改了第二层或者第n层的内容,cp_name都会被影响,因为此时的cp_name对象里面子列表是与name的子列表共享相同的内存空间。
而如果想要对第一层以及第二层甚至第n层都进行彻底的拷贝,那么就需要使用深层拷贝。
深层拷贝需要使用copy模块的deepcopy()方法。
import copy
name = ['root','admin',['root_temp','admin_temp']]
cp_name = copy.deepcopy(name)
# 查看二者的id
print(id(name),id(cp_name)) # 29863528 29933976 地址不同,说明开辟了处于两块不同的空间
# 对name 第一层以及第二层进行更改
name.append('t1')
name[2].append('t2')
# 查看cp_name是否内容发生变化
print(cp_name) # ['root', 'admin', ['root_temp', 'admin_temp']] 内容并未发生更改
此时,cp_name对象并不会被name所影响,无论name对象的第一层列表还是第n层的更改和变化,都不会影响cp_name,因为此时通过深层拷贝,两个对象已经完全的处于两个不同的独立内存空间,而这也就是深层拷贝。
总结
以上所述是小编给大家介绍的Python中的赋值和深浅拷贝,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# python
# 赋值
# 深浅拷贝
# 浅谈python的深浅拷贝以及fromkeys的用法
# 浅述python中深浅拷贝原理
# 浅谈Python对内存的使用(深浅拷贝)
# 详解python深浅拷贝区别
# 第一层
# 第二层
# 小编
# 象中
# 都是
# 是一种
# 在此
# 开辟了
# 给了
# 给大家
# 在上面
# 而这
# 改了
# 已经完全
# 两块
# 自然而然
# 所述
# 需要注意
# 给我留言
# 感谢大家
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速搭建安全的FTP站点?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
如何在建站主机中优化服务器配置?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
高端网站建设与定制开发一站式解决方案 中企动力
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
重庆市网站制作公司,重庆招聘网站哪个好?
如何登录建站主机?访问步骤全解析
Swift中循环语句中的转移语句 break 和 continue
Bootstrap整体框架之JavaScript插件架构
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
node.js报错:Cannot find module 'ejs'的解决办法
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel PHP版本要求一览_Laravel各版本环境要求对照
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
phpredis提高消息队列的实时性方法(推荐)
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel如何为API生成Swagger或OpenAPI文档
Python制作简易注册登录系统
如何快速搭建高效WAP手机网站吸引移动用户?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Claude怎样写结构化提示词_Claude结构化提示词写法【教程】
Laravel怎么实现模型属性的自动加密
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
如何用西部建站助手快速创建专业网站?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何在VPS电脑上快速搭建网站?
黑客入侵网站服务器的常见手法有哪些?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
高端企业智能建站程序:SEO优化与响应式模板定制开发
Python文本处理实践_日志清洗解析【指导】
html如何与html链接_实现多个HTML页面互相链接【互相】
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
如何获取上海专业网站定制建站电话?
再谈Python中的字符串与字符编码(推荐)
香港网站服务器数量如何影响SEO优化效果?
如何在IIS中新建站点并配置端口与IP地址?
jQuery validate插件功能与用法详解

