python的拷贝方法有:切片方法, 工厂方法, 深拷贝方法, 浅拷贝方法等。

几种方法都可以实现拷贝操作, 具体区别在于两点:1.代码写法不同。 2.内存地址引用不同

代码演示:

 import copy
li = ['li', [100, 200, 300]]
li_1 = li[:] # 切片方法
li_2 = list(li) # 工厂方法
li_3 = copy.copy(li) # 浅拷贝
li_4 = copy.deepcopy(li) # 深拷贝
print('li', li, 'id:', id(li))
print('li1', li_1, 'id:', id(li_1))
print('li2', li_2, 'id:', id(li_2))
print('li3', li_3, 'id:', id(li_3))
print('li4', li_4, 'id:', id(li_4)) # 运行结果
# li ['li', [100, 200, 300]] id: 47813336
# li1 ['li', [100, 200, 300]] id: 47814096
# li2 ['li', [100, 200, 300]] id: 47513768
# li3 ['li', [100, 200, 300]] id: 47508656
# li4 ['li', [100, 200, 300]] id: 56333696
# 可以看到id都不一样,说明他们指向的都不是同一个列表对象
# 将除深拷贝以外任意一个方法的‘100’,重新赋值为400, 再次运行结果为
li_2[1][0] = 400
print('li', li, 'id:', id(li))
print('li1', li_1, 'id:', id(li_1))
print('li2', li_2, 'id:', id(li_2))
print('li3', li_3, 'id:', id(li_3))
print('li4', li_4, 'id:', id(li_4))
# li ['li', [400, 200, 300]] id: 56332976
# li1 ['li', [400, 200, 300]] id: 56333736
# li2 ['li', [400, 200, 300]] id: 56033528
# li3 ['li', [400, 200, 300]] id: 56028416
# li4 ['li', [100, 200, 300]] id: 56333696
# 可以看到:只改变了一个列表而除deepcopy之外其他的列表对象都变成的‘400’
print('li', li, 'id:', id(li))
print('li1', li_1, 'id:', id(li_1))
print('li2', li_2, 'id:', id(li_2))
print('li3', li_3, 'id:', id(li_3))
print('li4', li_4, 'id:', id(li_4))

因为除deepcopy之外其它的拷贝方法都只是拷贝了列表中对象的引用,再开辟一块新的内存来储存,如果其中一个数据变了, 其他的也会跟着改变。

而deepcopy是拷贝的对象本身, 一旦拷贝过来, 则与之前的被拷贝者没有任何关系(自己改变与原来的数组无关,原来的数组改变与自己无关)

萧伯纳说:“你有一个苹果,我有一个苹果,彼此交换一下,我们彼此仍然是各有一个苹果;但是你有一种思,我有一种思想,彼此交换一下,才发现从不同角度看到的问题远比本身更深刻,所以多交流多沟通是我们提高自我能力的一种方式!!!

如果你有更好更简单的方法,请一定评论谢谢!!!

python的拷贝方式以及深拷贝,浅拷贝详解的更多相关文章

  1. 【转】 c++拷贝构造函数(深拷贝,浅拷贝)详解

     c++拷贝构造函数(深拷贝,浅拷贝)详解 2013-11-05 20:30:29 分类: C/C++ 原文地址:http://blog.chinaunix.net/uid-28977986-id-3 ...

  2. 【C++】拷贝构造函数(深拷贝,浅拷贝)详解

    一.什么是拷贝构造函数  首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: ; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对 ...

  3. **Python中的深拷贝和浅拷贝详解

    Python中的深拷贝和浅拷贝详解   这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容.   要说清楚Python中的深浅拷贝,需要 ...

  4. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  5. 七牛云存储Python SDK使用教程 - 上传策略详解

    文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k  ...

  6. Python调用C/C++动态链接库的方法详解

    Python调用C/C++动态链接库的方法详解 投稿:shichen2014 这篇文章主要介绍了Python调用C/C++动态链接库的方法,需要的朋友可以参考下 本文以实例讲解了Python调用C/C ...

  7. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)

    不多说,直接上干货! 参考博客 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解) 第一步:首先,提示升级下pip 第二步 ...

  8. 【python】redis基本命令和基本用法详解

    [python]redis基本命令和基本用法详解 来自http://www.cnblogs.com/wangtp/p/5636872.html 1.redis连接 redis-py提供两个类Redis ...

  9. 基于Python对象引用、可变性和垃圾回收详解

    基于Python对象引用.可变性和垃圾回收详解 下面小编就为大家带来一篇基于Python对象引用.可变性和垃圾回收详解.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. 变量不是盒子 在示例所示 ...

随机推荐

  1. PHP 23种设计模式

    学习PHP,对设计模式永远是逃不掉的:今天把php23种设计模式及其demo好好整理如下: 记录PHP关于23种设计模式的简单Demo. Demo地址:https://segmentfault.com ...

  2. go build、go install、go get命令详解

    (内容凌乱,日后整理!) 原文链接:https://blog.csdn.net/zhangliangzi/article/details/77914943 GO下载: GO语言中文网下载:https: ...

  3. Python 判断字符串是否包含中文

    一.摘要 使用 xlrd 模块打开带中文的excel文件时,会报错. FileNotFoundError: [Errno 2] No such file or directory: 'xx.xlsx' ...

  4. CF1090H Linearization 构造、位运算、前缀和

    传送门 有点神仙的题目 首先注意到对于串\(s\),\(b=s_0\)一定会比\(b = s_0 \bigoplus 1\)更优 考虑先分析linear串的性质.注意到位运算考虑按位处理.我们考虑\( ...

  5. ADO,net 实体数据模型增、删、改,浅谈

    第一步:建立ADO.net数据模型,一步步操作就行 第二步:画个简单的测试界面 第三步铺代码 using DevComponents.DotNetBar.SuperGrid; using DevCom ...

  6. SocketException: Write failed (OS Error: Broken pipe, errno = 32

    https://github.com/flutter/flutter/issues/16491

  7. Jboss部署war以及获取Resource的真实路径

    Jboss部署war以及获取Resource的真实路径 最近在将一个SpringBoot项目打成war包部署到Jboss中,中途遇到一些问题记录. Jboss上部署war 普通的SpringBoot项 ...

  8. 【转载】 C#使用Math.Round方法对计算结果进行四舍五入操作

    在C#的数值运算中,有时候需要对计算结果进行四舍五入操作,此时就可使用内置方法Math.Round方法来实现四舍五入操作,Math.Round方法有多个重载函数,支持设置有效位数进行四舍五入,如果没有 ...

  9. 谈一谈做iOS播放器库开发所涉及的知识点

    在自己研究生毕业的时候,想着能找上一份做视频编解码的工作,可惜没有如愿,最后到了一家iOS游戏渠道公司去做游戏支付业务的SDK开发,我的iOS正式开发生涯就这么开始了. 在那家iOS游戏渠道没做上一年 ...

  10. Mysql 存储过程 + python调用存储过程 (内置函数讲解及定义摘抄)

    定义 存储过程:就是为以后的使用而保存的一条或多条 MySQL语句的集合.可将其视为批文件,虽然它们的作用不仅限于批处理. 个人使用存储过程的原因就是因为 存储过程比使用单独的SQL语句要快 有如下表 ...