python中,有着深拷贝和浅拷贝,即copy模块

下面我们就来聊一下:

运行效果:

==================================================

代码部分:

==================================================

 #python copy
'''
个人认为:
浅拷贝:拷贝后,对象的引用没有发生变化,而对象的行为发生变化,会反映到拷贝后的对象身上
深拷贝:拷贝后,对象的引用发生了变化,即对象不同,所以,即使对象再怎么变,也不会对其他对象产生影响
''' import copy def shallow_copy(s):
'''make a shallow copy of s.'''
return copy.copy(s) def deep_copy(d):
'''make a deep copy of d.'''
return copy.deepcopy(d) def test_shallow():
tem_data = ['a', 'c', 'e', 't', [1, 2, 3]]
print('被拷贝的源数据为:{}'.format(tem_data))
s_copy = shallow_copy(tem_data)
print('进行浅拷贝....')
tem_data.append('Hongten')
tem_data[4].append('')
print('修改源数据后:{}'.format(tem_data))
print('拷贝后的数据为:{}'.format(s_copy)) def test_deep():
tem_data = ['a', 'c', 'e', 't', [1, 2, 3]]
print('被拷贝的源数据为:{}'.format(tem_data))
s_copy = deep_copy(tem_data)
print('进行深拷贝....')
tem_data.append('Hongten')
tem_data[4].append('')
print('修改源数据后:{}'.format(tem_data))
print('拷贝后的数据为:{}'.format(s_copy)) def test_s_copy():
'''listB复制了listA,这时候listB是对listA的一个引用
他们指向的是同一个对象:[1, 2, 3, 4, 5],当我们试图修
改listB[1] = 'Hongten'的时候,listB的所指向的对象的
行为发生了变化,即元素的值发生了变化,但是他们的引用是没
有变化的,所以listA[1] = 'Hongten'也是情理之中的事'''
listA = [1, 2, 3, 4, 5]
listB = listA
listB[1] = 'Hongten'
print('listA = {}, listB = {}'.format(listA, listB)) def test_clone():
'''进行了列表的克隆操作,即拷贝了另一个列表,这样的操作,
会创造出新的一个列表对象,使得listA和listB指向不同的对象,
就有着不同的引用,所以当listB[1] = 'Hongten'的时候,
listA[1]还是等于2,即不变'''
listA = [1, 2, 3, 4, 5]
listB = listA[:]
listB[1] = 'Hongten'
print('listA = {}, listB = {}'.format(listA, listB)) def main():
print('浅拷贝Demo')
test_shallow()
print('#' * 50)
print('深拷贝Demo')
test_deep()
print('#' * 50)
test_s_copy()
print('#' * 50)
test_clone() if __name__ == '__main__':
main()

python开发_copy(浅拷贝|深拷贝)_博主推荐的更多相关文章

  1. python开发_sqlite3_绝对完整_博主推荐

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...

  2. python开发_zlib_完整版_博主推荐

    ''' python中的zlib模块提供了压缩和解压缩的方法 实现功能: 读取一个文件的内容,然后把该文件的内容以字符串的形式返回 然后对返回回来的字符串进行压缩处理,然后写入到另一个文件中 同时,也 ...

  3. python开发_shelve_完整版_博主推荐

    ''' python中的shelve模块,可以提供一些简单的数据操作 他和python中的dbm很相似. 区别如下: 都是以键值对的形式保存数据,不过在shelve模块中, key必须为字符串,而值可 ...

  4. python开发_tkinter_菜单选项中英文切换_菜单选项不可用操作_博主推荐

    我使用的python版本为:3.3.2 如果你对python中tkinter模块的菜单操作不是很了解,你可以看看: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推 ...

  5. python开发_xml.dom_解析XML文档_完整版_博主推荐

    在阅读之前,你需要了解一些xml.dom的一些理论知识,在这里你可以对xml.dom有一定的了解,如果你阅读完之后. 下面是我做的demo 运行效果: 解析的XML文件位置:c:\\test\\hon ...

  6. python开发_configparser_解析.ini配置文件工具_完整版_博主推荐

    # # 最近出了一趟差,是从20号去的,今天回来... # 就把最近学习的python内容给大家分享一下... # ''' 在python中,configparser模块提供了操作*.ini配置文件的 ...

  7. python开发_csv(Comma Separated Values)_逗号分隔值_常用导入导出格式_完整版_博主推荐

    ## 最近出了一趟差,是从20号去的,今天回来...# 就把最近学习的python内容给大家分享一下...#''' 在python中,CSV(Comma Separated Values),从字面上面 ...

  8. python开发_gzip_压缩|解压缩gz文件_完整版_博主推荐

    ''' gzip -- 支持gzip文件 源文件:Lib/gzip.py 这个模块提供了一些简单的接口来对文件进行压缩和解压缩,类似于GNU项目的gzip和gunzip. 数据的压缩源于zlib模块的 ...

  9. python开发_dbm_键值对存储_完整_博主推荐

    ''' 在python的应用程序中,不需要关系型数据库时,如MySQL 可以使用python提供的持久字典dbm来存储名称和值(键值对) 这个类似于java的中的java.util.Map对象. 区别 ...

随机推荐

  1. Problem D. Berland Railroads Gym - 101967D (思维)

    题目链接:https://cn.vjudge.net/contest/274029#problem/D 题目大意:给你0-9每个数的个数,然后让你找出最大的数,满足的条件是任意三位相连的都能被三整除. ...

  2. linux下subversion的安装

    第一章 安装 这里以RHEL5下安装subversion-1.6.6,为例 1. 下载源码包 在http://archive.apache.org/dist/subversion/网站下载 subve ...

  3. 模型稳定度指标PSI与IV

    由于模型是以特定时期的样本所开发的,此模型是否适用于开发样本之外的族群,必须经过稳定性测试才能得知.稳定度指标(population stability index ,PSI)可衡量测试样本及模型开发 ...

  4. 摘: 给Shapre命名

    有两种解决方式: 在 VBA 中将slide中的Shape命名,改变shape.name即可. 另外一种方式就是有点投机取巧:你可以点击shap,右键选择web/alternativetext做些标记 ...

  5. MAC和PHY的区别

    一块以太网网卡包括OSI(开方系统互联)模型的两个层.物理层和数据链路层.物理层定义了数据传送与接收所需要的电与光信号.线路状态.时钟基准.数据编码和电路等,并向数据链路层设备提供标准接口.数据链路层 ...

  6. c++环境配置 Eclipse+mingw-get-setup

    1,到官网下载eclipse  和  mingw-get-setup 2,先安装eclipse,然后等着... 3,再安装mingw-get-setup, 等待...安装完成后打开,选择basic s ...

  7. ssh使两台机器建立连接

    ssh利用口令建立连接过程: 客户端--> 发送连接请求 --> 远程主机 --> 返回远程主机的公钥 --> 公钥加密客户端私钥+客户端公钥返回远程主机 --> 远程主 ...

  8. 最小的Django应用

    创建一个hello.py   内容如下: import sys from django.conf import settings # 设置 settings.configure( DEBUG = Tr ...

  9. ansible command模块将返回值写入变量

    ansible 中command模块支持 register参数将远程命令执行的输出结果存储在变量中,后续可以在when中对该变量进行检索确定下一步任务. --- - name: cat /etc/re ...

  10. SVN的使用、分支合并及解决冲突详解

    一.什么是SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS. 二.SVN的下载安装 下载地址:http ...