码迷,mamicode.com
首页 > 编程语言 > 详细

python数据结构(三)

时间:2018-05-25 00:23:12      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:__init__   需要   object   文本   pre   self   建立   The   code   

copy 复制对象,copy模块包含了两个行数copy和deepcopy,用于复制现有的对象

浅副本(浅复制)

copy()创建的浅副本是一个新容器,其中填充了原对象内容的引用

import copy
    
class MyClass:
    def __init__(self,name):
        self.name = name
    def __cmp__(self, other):
        return cmp(self.name,other.name)

a = MyClass(a)
my_list = [a]
dup =copy.copy(my_list)
#对于浅副本不会复制MyClass实例,所以dup列表中的引用会指向my_list相同的对象
print(my_list)
print(dup)
print(dup is my_list)
print(dup == my_list)
print(dup[0] is my_list[0])
print(dup[0] == my_list[0])
结果:
[<__main__.MyClass object at 0x000001E84E5B93C8>]
[<__main__.MyClass object at 0x000001E84E5B93C8>]
False
True
True
True

deepcopy()创建的深副本(深复制)是一个新的容器,其中填充原对象的内容的副本

#dup =copy.copy(my_list)
dup =copy.deepcopy(my_list)

结果
[<__main__.MyClass object at 0x0000028C5A7B93C8>]
[<__main__.MyClass object at 0x0000028C5A8433C8>]
False
False
False
False

定制复制行为,可以使用特殊方法__copy__()和__deepcopy__()来控制如何建立副本。

 

pprint美观打印数据结构,用于生成数据结构的美观视图,便于人类阅读。

#打印
from pprint import pprint
data = [(1,{a:A,b:B,c:C,d:D}),
        (2,{e:e,f:f,g:g,a:A,b:B,c:C,d:D,h:h,i:i,j:j})
        ]
#格式化一个对象,并把它写入到一个数据流,使用参数width调整格式化文本的宽度(默认为80),如果设置的宽度太小导致引起语法问题时候则不会再被截断
pprint(data,width=50)
#限制嵌套的输出,对于非常深的数据结构,可能不需要输出所有细节,未包含层次使用...代替
pprint(data,depth=1)
#递归 递归数据由指向原数据的引用来表示
from pprint import pprint
local_data = [n,a,1,2,3]
local_data.append(local_data)
pprint(local_data)
结果:
[(1, {a: A, b: B, c: C, d: D}),
 (2,
  {a: A,
   b: B,
   c: C,
   d: D,
   e: e,
   f: f,
   g: g,
   h: h,
   i: i,
   j: j})]
[(...), (...)]
[n, a, 1, 2, 3, <Recursion on list with id=2182885502024>]

 

python数据结构(三)

标签:__init__   需要   object   文本   pre   self   建立   The   code   

原文地址:https://www.cnblogs.com/master-song/p/9085669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!