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(浅拷贝|深拷贝)_博主推荐的更多相关文章
- python开发_sqlite3_绝对完整_博主推荐
'''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...
- python开发_zlib_完整版_博主推荐
''' python中的zlib模块提供了压缩和解压缩的方法 实现功能: 读取一个文件的内容,然后把该文件的内容以字符串的形式返回 然后对返回回来的字符串进行压缩处理,然后写入到另一个文件中 同时,也 ...
- python开发_shelve_完整版_博主推荐
''' python中的shelve模块,可以提供一些简单的数据操作 他和python中的dbm很相似. 区别如下: 都是以键值对的形式保存数据,不过在shelve模块中, key必须为字符串,而值可 ...
- python开发_tkinter_菜单选项中英文切换_菜单选项不可用操作_博主推荐
我使用的python版本为:3.3.2 如果你对python中tkinter模块的菜单操作不是很了解,你可以看看: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推 ...
- python开发_xml.dom_解析XML文档_完整版_博主推荐
在阅读之前,你需要了解一些xml.dom的一些理论知识,在这里你可以对xml.dom有一定的了解,如果你阅读完之后. 下面是我做的demo 运行效果: 解析的XML文件位置:c:\\test\\hon ...
- python开发_configparser_解析.ini配置文件工具_完整版_博主推荐
# # 最近出了一趟差,是从20号去的,今天回来... # 就把最近学习的python内容给大家分享一下... # ''' 在python中,configparser模块提供了操作*.ini配置文件的 ...
- python开发_csv(Comma Separated Values)_逗号分隔值_常用导入导出格式_完整版_博主推荐
## 最近出了一趟差,是从20号去的,今天回来...# 就把最近学习的python内容给大家分享一下...#''' 在python中,CSV(Comma Separated Values),从字面上面 ...
- python开发_gzip_压缩|解压缩gz文件_完整版_博主推荐
''' gzip -- 支持gzip文件 源文件:Lib/gzip.py 这个模块提供了一些简单的接口来对文件进行压缩和解压缩,类似于GNU项目的gzip和gunzip. 数据的压缩源于zlib模块的 ...
- python开发_dbm_键值对存储_完整_博主推荐
''' 在python的应用程序中,不需要关系型数据库时,如MySQL 可以使用python提供的持久字典dbm来存储名称和值(键值对) 这个类似于java的中的java.util.Map对象. 区别 ...
随机推荐
- Java简单爬虫(一)
简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息.然后我们可以将这些有用的信息保存到数据库或者保存到文件中.如果我们手工一个一个访问提取非常慢,所以我们需要编 ...
- 某线下赛AWD
拿别人比赛的来玩一下,或许这就是菜的力量吧. 0x01 任意文件读取: switch ($row['media_type']) { case 0: // 图片广告 ...... break; case ...
- Python3 动态导入模块的两种方式
动态导入模块就是只知道str类型的模块名字符串,通过这个字符串导入模块 需要导入的模块: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:C ...
- linux配置samba服务【原创】
转载请注明出处http://www.cnblogs.com/paul8339/p/7509981.html 需求,windows服务器访问linux的共享文件,需要linux服务器安装并配置samba ...
- 45.Jump Game II---贪心---2018大疆笔试题
题目链接 题目大意:与55题类似,只是这里要求出跳数. 法一(借鉴):贪心.cur表示当前能到达的最远距离,pre表示上一次能到达的最远距离,每到一个位置更新一次最远距离cur,如果当前位置超过了上一 ...
- 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection API Guava Basic Utilities IO API C ...
- 字节对齐&&sizeof
转:http://blog.chinaunix.net/uid-722885-id-124878.html 1. sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { ...
- #ifndef的用法
作用:防止头文件的重复包含和编译 定义 #ifndef x #define x ... #endif 这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说 ...
- n*m的矩阵,行和列都递增有序,求是否出现target元素(面试题)
题目描述:给定一个n*m的矩阵,矩阵的每一行都是递增的,每一列也是递增的,给定一个元素target,问该target是否在矩阵中出现. 思路:先从最左下角的元素开始找,三种情况: 1. 如果该元素大于 ...
- Linux文件系统的详解
这里以 EXT2 文件系统为例 在Linux下,一个磁盘的最前面是MBR,大小为512Byte 在每一个分区下,第一部分是boot sector,接下来是super block,再接下来是inode, ...