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. HNU Joke with permutation (深搜dfs)

    题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=13341&courseid=0 Joke with pe ...

  2. Deep Learning基础--理解LSTM网络

    循环神经网络(RNN) 人们的每次思考并不都是从零开始的.比如说你在阅读这篇文章时,你基于对前面的文字的理解来理解你目前阅读到的文字,而不是每读到一个文字时,都抛弃掉前面的思考,从头开始.你的记忆是有 ...

  3. python的sorted函数对字典按value进行排序

    场景:词频统计时候,我们往往要对频率进行排序 sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数.其中iterable表示可 ...

  4. nginx location 指令意义

    基本语法:location [=|~|~*|^~] /uri/ { … } = 严格匹配.如果这个查询匹配,那么将停止搜索并立即处理此请求.~ 为区分大小写匹配(可用正则表达式)!~为区分大小写不匹配 ...

  5. Django 1.10文档中文版Part1

    目录 第一章.Django1.10文档组成结构1.1 获取帮助1.2 文档的组织形式1.3 第一步1.4 模型层1.5 视图层1.6 模板层1.7 表单1.8 开发流程1.9 admin站点1.10 ...

  6. acm专题---dfs+bfs

    题目来源:http://hihocoder.com/problemset/problem/1049 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描 ...

  7. leetcode 之Remove Duplicates from Sorted Array(1)

    删除数组中的重复元素并返回新数组的个数 思路:保留不同的元素即可. int removeDeplicates(int A[], int n) { ; ; i < n; i++) { if (A[ ...

  8. JavaWeb知识回顾-Servlet常用类、接口及其方法

    今天主要把servlet的一些常用的类.接口和方法简单回顾一下. javax.servlet包 1.javax.servlet.Servlet接口 接口用于开发servlet,所有的servlet都要 ...

  9. Android 下使用 JSON 实现 HTTP 请求,外加几个示例!

    不得不说,JSON 格式的确是非常美妙的,速度快而且简化了很多操作在 Android 下,Android SDK 已经为我们封装好了整个与 JSON 有关的操作,使用非常方便 以下就是一个标准的 JS ...

  10. GUC-3 模拟CAS算法

    /* * 模拟 CAS 算法 */ public class TestCompareAndSwap { public static void main(String[] args) { final C ...