copy模块
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
#copy复制对象
#作用:提供一些函数,可以使用潜复制和深复制进行复制对象
#版本1.4及之后
#包含coy()和deepcopy()进行复制对象
#潜复制:引用
import copy
class Myclass:
def __init__(self,a):
self.name=a
def __cmp__(self,oth):
return cmp(self.name,oth.name)
print u'潜复制'
a= Myclass('a')
my_list=[a]
dup=copy.copy(my_list)
print 'my_list:',my_list
print 'dup is my_list:',dup
print 'dup == my_list:',dup==my_list
print 'dup[0] is my_list[0]:',dup[0]is my_list[0]
print 'dup[0]==my_list[0]:',dup[0]==my_list[0]
#对于一个潜复制,不会复制父类实例,所以列表中引用会指向列表中相同的对象
#深复制
print u'深复制'
dup=copy.deepcopy(my_list)
print 'my_list:',my_list
print 'dup is my_list:',dup
print 'dup == my_list:',dup==my_list
print 'dup[0] is my_list[0]:',dup[0]is my_list[0]
print 'dup[0]==my_list[0]:',dup[0]==my_list[0]
#定制复制行为
"""
可以使用特殊方法__cmp__()和__deepcopy__()来近几年如何建立副本
__copy__()不提供任何参数,返回一个潜复制
__deepcopy__()提供一个备忘<字典>返回一个深复制,所有需要深复制的成员属性都要连同备忘字典传递给__deepcopy__()来控制递归
"""
#例子
print u'特殊方法'
class MN:
def __init__(self,name):
self.name=name
def __cmp__(self, other):
return cmp(self.name,other.name)
def __copy__(self):
print '__copy__()'
return MN(self.name)#递归调用
def __deepcopy__(self,m):
print '__deepcopy__(%s)'%str(m)
return MN(copy.deepcopy(self.name,m))
a=MN('a')
c=copy.copy(a)
dc=copy.deepcopy(a)
#深复制中递归问题
#通过实例__deepcopy__()方法来防止递归
print u'其他内容'
import pprint
class Graph:
def __init__(self,name,c):
self.name=name
self.c=c
def add_connection(self,othr):
self.c.append(othr)
def __repr__(self):
return 'Graph(name=%s id=%s)'%(self.name,id(self))
def __deepcopy__(self,n):#这里的n表示字典的key
print '\ncalling_deepcopy__ for %r'%self
if self in n:
existing=n.get(self)
print ' Already copid to %r'%existing
return existing
print ' n dictonary:'
pprint.pprint(n,indent=4,width=40)
dup=Graph(copy.deepcopy(self.name,n),[])
print 'copying to new object %s'%dup
n[self]=dup
for c in self.c:
dup.add_connection(copy.deepcopy(c,n))
return dup
root=Graph('root',[])
a=Graph('a',[root])
b=Graph('b',[a,root])
root.add_connection(a)
root.add_connection(b)
dup=copy.deepcopy(root)
#更多:http://blog.csdn.net/yueguanghaidao/article/details/25613887
#这边对__deepcopy(self,n):对n进行了说明
#官方文档:https://docs.python.org/2.7/library/copy.html?highlight=copy#copy
copy模块的更多相关文章
- python学习之copy模块
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepc ...
- ansible copy 模块的使用
copy copy 模块是将 ansible 管理主机上的文件拷贝上远程主机中,与 fetch 相反,如果目标路径不存在,则自动创建,如果 src 的目录带“/” 则复制该目录下的所有东西,如果 sr ...
- ansible copy 模块详解
ansible 模块 copy one.概述 copy 模块的作用就是拷贝文件,它与之前介绍过的 fetch 模块类似,不过,fetch 模块是从远程主机中拉取文件到 ansible 管理主机,而 c ...
- python copy模块
python copy模块 copy模块用于对象的拷贝操作 该模块只提供了两个主要的方法: copy.copy:浅复制 copy.deepcopy:深复制 直接赋值,深拷贝和浅拷贝的区别 直接赋值:简 ...
- 洗礼灵魂,修炼python(16)--列表进阶话题—>上节作业讲解+copy模块,浅拷贝,深拷贝
上节课后作业: 1.使用列表解析输出结果:[(0,0),(0,2),(2,0),(2,2)] 方法1: 方法2: 方法3: 2.使用列表生成器打印斐波那契数列 3.使用列表解析生成列表[1x2,3x4 ...
- python标准库介绍——9 copy模块详解
==copy 模块== ``copy`` 模块包含两个函数, 用来拷贝对象, 如 [Example 1-64 #eg-1-64] 所示. ``copy(object) => object`` 创 ...
- python的copy模块
python的copy模块 概念 Python中的赋值语句不复制对象,它们在目标和对象之间建立索引,这就是浅复制.对于一些对象或者集合,我们有时需要一个副本,以便可以更改一个副本中的值而不改变其原对象 ...
- Python:序列的copy() 方法和 copy 模块
转于:Python中copy和deepcopy中的区别 博主:assan 一.序列中的 copy() 方法 # 此方法为浅度复制:复制的数会随着被复制数的嵌套序列的元素的改变而改变: # 功能:将一个 ...
- Ansible的copy模块批量下发文件
copy模块的参数,ansible 主机组 -m copy -a '' src: 指定源文件或目录 dest: 指定目标服务器的文件或目录 backup: 是否要备份 owner: 拷贝到目标服务器后 ...
- ansible的copy模块应用(ansible 2.9.5)
一,copy模块的作用: 复制文件到受控的远程主机 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest 对应的源码可以访问 ...
随机推荐
- XAMPP安装及配置注意事项
1.下载对应版本以后,解压安装 2.设置环境变量中的path,即D:\xampp\mysql\bin 3.设置监听端口 4.解决端口冲突问题 5.各种测试网址注意事项 由于很晚了,先记录下来,明天补充 ...
- java基础 二分查找算法
/* * 折半查找法: * 思路: * 定义三个变量记录查找范围中最大.最小和中间的索引值,每次都是使用中间索引值与要查找的目标进行对比,如果不符合,那么就不停缩小查找范围 * */ ...
- 给那些因为Firebug而舍不得FireFox的朋友
Google Chrome浏览器调试 作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/20 ...
- MongoDB 的 MapReduce 大数据统计统计挖掘
MongoDB虽然不像我们常用的mysql,sqlserver,oracle等关系型数据库有group by函数那样方便分组,但是MongoDB要实现分组也有3个办法: * Mongodb三种分组方式 ...
- UVA 1558 - Number Game(博弈dp)
UVA 1558 - Number Game 题目链接 题意:20之内的数字,每次能够选一个数字,然后它的倍数,还有其它已选数的倍数组合的数都不能再选,谁先不能选数谁就输了,问赢的方法 思路:利用dp ...
- Android开源代码解读のOnScrollListener实现ListView滚屏时不加载数据
使用ListView过程中,如果滚动加载数据的操作比较费时,很容易在滚屏时出现屏幕卡住的现象,一个解决的办法就是不要在滚动时加载数据,而是等到滚动停止后再进行数据的加载.这同样要实现OnScrollL ...
- 用web技术开发出原生的App应用的体会(1)
本人是是个前端小白,学前端已经有半年的时间了,前几天开了个博客,希望记录自己学习历程的点滴. 今天要写的是关于用html,css,javascript等web技术开发原生的app应用. 总所周知,we ...
- QQ在线联系代码
添加图文模块,标题地址:tencent://message/?uin=你的QQ号&Site=myqq&Menu=yes "你的QQ号"就写您自己的Q号 图片地址写: ...
- Android原生Calendar代码阅读(一)
原生Calendar代码: 5.0Calendar源码.rar 提取的JavaDoc: Calendar的javadoc.rar 1. AsyncQueryService和AsyncQueryServ ...
- List.removeAll()方法失效
List.removeAll()方法失效 前几天遇到List.removeAll()方法失效,测试了半天都没测出来,后面跟老大在那边调试了半天,最后终于找出原因,以后要是谁遇到这个奇葩的问题可以借鉴参 ...