# -*- 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模块的更多相关文章

  1. python学习之copy模块

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepc ...

  2. ansible copy 模块的使用

    copy copy 模块是将 ansible 管理主机上的文件拷贝上远程主机中,与 fetch 相反,如果目标路径不存在,则自动创建,如果 src 的目录带“/” 则复制该目录下的所有东西,如果 sr ...

  3. ansible copy 模块详解

    ansible 模块 copy one.概述 copy 模块的作用就是拷贝文件,它与之前介绍过的 fetch 模块类似,不过,fetch 模块是从远程主机中拉取文件到 ansible 管理主机,而 c ...

  4. python copy模块

    python copy模块 copy模块用于对象的拷贝操作 该模块只提供了两个主要的方法: copy.copy:浅复制 copy.deepcopy:深复制 直接赋值,深拷贝和浅拷贝的区别 直接赋值:简 ...

  5. 洗礼灵魂,修炼python(16)--列表进阶话题—>上节作业讲解+copy模块,浅拷贝,深拷贝

    上节课后作业: 1.使用列表解析输出结果:[(0,0),(0,2),(2,0),(2,2)] 方法1: 方法2: 方法3: 2.使用列表生成器打印斐波那契数列 3.使用列表解析生成列表[1x2,3x4 ...

  6. python标准库介绍——9 copy模块详解

    ==copy 模块== ``copy`` 模块包含两个函数, 用来拷贝对象, 如 [Example 1-64 #eg-1-64] 所示. ``copy(object) => object`` 创 ...

  7. python的copy模块

    python的copy模块 概念 Python中的赋值语句不复制对象,它们在目标和对象之间建立索引,这就是浅复制.对于一些对象或者集合,我们有时需要一个副本,以便可以更改一个副本中的值而不改变其原对象 ...

  8. Python:序列的copy() 方法和 copy 模块

    转于:Python中copy和deepcopy中的区别 博主:assan 一.序列中的 copy() 方法 # 此方法为浅度复制:复制的数会随着被复制数的嵌套序列的元素的改变而改变: # 功能:将一个 ...

  9. Ansible的copy模块批量下发文件

    copy模块的参数,ansible 主机组 -m copy -a '' src: 指定源文件或目录 dest: 指定目标服务器的文件或目录 backup: 是否要备份 owner: 拷贝到目标服务器后 ...

  10. ansible的copy模块应用(ansible 2.9.5)

    一,copy模块的作用: 复制文件到受控的远程主机 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest 对应的源码可以访问 ...

随机推荐

  1. LG 2.2.1 P350安卓系统刷机,问题总结,希望对需要的朋友有助

    手机误删软件导致短信,键盘等无声音提醒 我的手机前几天被我误删了一个软件,导致电话接不了,别人打电话的时候,老提示我在通话中,但是我可以在通话中看到对方的打电话记录.短信,键盘,USB连接,等等都没有 ...

  2. Android ActionBar应用实战,高仿微信主界面的设计

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对 ...

  3. [转]iOS开发使用半透明模糊效果方法整理

    转自:http://www.molotang.com/articles/1921.html 虽然iOS很早就支持使用模糊效果对图片等进行处理,但尤其在iOS7以后,半透明模糊效果得到大范围广泛使用.包 ...

  4. css伪类选择器详细解析及案例使用-----伪元素

    伪元素:(css3中将所有伪元素前变成了两个冒号,即::first-letter.::first-line.::before.::after.::selection.目的是为了区分伪元素与伪类.对于I ...

  5. vs2012快捷键失效解决办法

    快速解决vs开发工具快捷键失效,看图

  6. ashx调用session对象

    1.引入命名空间 using System.Web.SessionState 2.必须实现接口 public class Login : IHttpHandler, IRequiresSessionS ...

  7. angular 指令梳理 —— checkBox

    checkBox 持久化数据为 逗号分割 /** * 功能说明: * htCheckbox 指令用于收集checkbox数据. * 在页面中使用 * 属性指令:ht-checkbox * 对应的值为s ...

  8. CUICatalog: Invalid asset name supplied:

    [UIImage imageNamed:name];但是这个name却是空的,所以就报了这个错了. 解决方法,在项目中搜索UIImage imageNamed:,然后打印看看所谓的name是否为空.找 ...

  9. jvm的client和server

    最近研究c++代码调用java的jar,发现64位的下的jvm在server路径,而32位的jvm则存在client路径下面,于是十分好奇,查了下,这里做个记录 JVM Server模式与client ...

  10. struts2 使用jsonplugin

    配置中的参数含义: root参数用于指定要序列化的根对象,如果省去这一配置,表示要序列化action中的所有属性 ignoreHierarchy 为false时表示要序列化根对象的所有基类 exclu ...