python深浅拷贝 面试_python基础-深浅拷贝
深拷贝与浅拷贝
总结:
# 浅拷贝:list dict: 嵌套的可变数据类型是同一个
# 深拷贝:list dict: 嵌套的不可变数据类型彼此独立
浅拷贝
# 个人理解:
# 在内存中重新创建一个空间(所以内存地址不同),
# 内存地址延用之前的,所以列表内每个元素的内存地址相同,
# 修改数据:如列表内元素为不可变类型,修改后,相当于修改了内存地址指向,拷贝的用的是之前的内存地址,所以两个列表同一位置,数据不同
# 如列表内元素为可变类型,两个列表id相同,修改后,id依然不变,所以,列表内可变类型元素修改后,两个同时修改
# 拷贝后,两者id不同
list1 = [1, 201, "name", ["zhangsan", "lisi"]]
list2 = list1.copy()
print(id(list1)) # 1494875032904
print(id(list2)) # 1494875033032
# 拷贝后,直接给列表增加数据
# copy之后,内存地址不一样,此时再去修改数据,只是修改的自己本身,不影响copy后的数据
list1.append("333")
print(list1) # [1, 201, 'name', ['zhangsan', 'lisi'], '333']
print(list2) # [1, 201, 'name', ['zhangsan', 'lisi']]
# copy后,修改列表内不可变数据类型数据,修改后,不影响copy数据
list1[0] = 800
print(id(list1[0])) # 2742476311120
print(id(list2[0])) # 1894219888
print(list1) # [800, 201, 'name', ['zhangsan', 'lisi'], '333']
print(list2) # [1, 201, 'name', ['zhangsan', 'lisi']]
# copy后,修改列表内可变数据类型数据,修改后,两者同时改变
list1[-2].append("huhansan")
print(id(list1[-2])) # 324363528840
print(list1) # [1, 201, 'name', ['zhangsan', 'lisi', 'huhansan'], '333']
print(id(list2[-1])) # 324363528840
print(list2) # [1, 201, 'name', ['zhangsan', 'lisi', 'huhansan']]
深拷贝
# 深拷贝 copy后,两者彼此完全独立
# python优化为:列表中不可变数据类型使用同一地址,可变数据类型重新创建,彼此独立
import copy
list1 = [1, 201, "name", ["zhangsan", "lisi"]]
list2 = copy.deepcopy(list1)
print(id(list1)) # 2336950587016
print(id(list2)) # 2336950570440
# 修改深拷贝后,列表内可变数据类型数据,两者id不同,彼此独立
list1[-1].append("wangwu")
print(id(list1[-1])) # 1506007387720
print(id(list2[-1])) # 1506007384904
print(list1) # [1, 201, 'name', ['zhangsan', 'lisi', 'wangwu']]
print(list2) # [1, 201, 'name', ['zhangsan', 'lisi']]
# 面试题:
list3 = [1, 2, 3, [22, 33]]
list4 = list3[:]
list3[-1].append("zhangsan")
print(id(list3[-1])) # 1966908952200
print(id(list4[-1])) # 1966908952200
print(list3) # [1, 2, 3, [22, 33, 'zhangsan']]
print(list4) # [1, 2, 3, [22, 33, 'zhangsan']]
python深浅拷贝 面试_python基础-深浅拷贝相关推荐
- python必刷面试_Python面试必刷题系列(5)
本篇是[Python面试必刷题系列]的第5篇文章.通过收集.整理Python真实面试题,给大家讲解面试中的python高频考察点,希望能够引起读者的足够重视. 往期回顾: Python中 is 和 = ...
- python第七关_python 基础第七篇
一. 补充基础数据类型的相关知识点 str. join() 把列表变成字符串 列表不能再循环的时候删除. 因为索引会跟着改变 字典也不能直接循环删除.把要删除的内容记录在列表中. 循环列表. 删除原列 ...
- python深浅拷贝 面试_Python面试宝典之基础篇-02
原标题:Python面试宝典之基础篇-02 我觉得你如果正在找工作,我的Python面试宝典几期教程,你一定得花时间看完了! 题目006:说说Python中的浅拷贝和深拷贝. 点评:这个题目本身出现的 ...
- python怎么输出复数_python基础知识及应用(二)输入输出|递归|深浅拷贝|全局变量|复数...
目录 一.python输入输出 二.迭代 2.1 输入与输出 2.2 解法 三.拷贝 3.1 拷贝实例 3.2 对象的赋值 3.3 浅拷贝 3.4 深拷贝 3.5 拷贝例如 四.set 4.1 题 4 ...
- python深浅拷贝应用_python之深浅拷贝
对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. print(id(n2)) 对于字典.元组.列表而言,进行赋值.浅拷贝和深拷贝时,其内存地址的变化是不同的. ...
- python 深浅拷贝案例_python(深浅拷贝)
1.深拷贝 --> 克隆一份,修改拷贝后的内容不对原对象内容产生影响 拷贝后修改序列中元素内容,注意:被修改的元素不能为一个序列中的某个值 a = [["北京多测师", ...
- cpython python 区别面试_python基础教程之千万不要错过这几道Python面试题
第1题: python下多线程的限制以及多进程中传递参数的方式? python多线程有个全局解释器锁(global interpreter lock),简称GIL,这个GIL并不是python的特性, ...
- python列表浅复制_Python列表深浅复制详解
转自:https://www.cnblogs.com/blaomao/p/7239203.html 在文章<Python 数据类型>里边介绍了列表的用法,其中列表有个 copy() 方法, ...
- python 条件表达式换行_Python基础语法 - LongKing-Xu的个人空间 - OSCHINA - 中文开源技术交流社区...
python基础语法 一.标识符 在Python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. 在Python中的标识符是区分大小写的. 在Python中以下划线开头的标识符是有 ...
最新文章
- 一次看懂RIP协议。
- textview的基本设置
- Random Maze HDU - 4067 费用流/可行流
- php怎么传json数据_php和js如何通过json互相传递数据相关问题探讨
- python生成正态分布数据_python 生成正态分布数据,并绘图和解析
- JavaWeb知识总结
- Security - 轻量级Java身份认证、访问控制安全框架
- volatile的总结
- 临时邮箱有什么用,推荐5个临时邮箱
- 微信小程序分享朋友圈API限制问题
- Tackling Climate Change with Machine Learning
- Cascade EF-GAN: 局部聚焦渐进式面部表情编辑
- 部署JAX-WS Web服务作为战争中的Apache Tomcat(Deploying JAX-WS webservice as War in Apache Tomcat)...
- 完全卸载Android Studio的方法
- 模块化:ES Module与commonJS
- 导数与偏导数的推导过程
- web前端需要学MySQL吗_web前端需要学什么?容易学吗?
- 尚学堂Java第五章所有题目
- Zookeeper小解
- 心情平静时看书,还是看书得到平静