zoukankan      html  css  js  c++  java
  • python数据结构(三)

    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>]
  • 相关阅读:
    你敢说自己了解单例模式?
    关于线程池,那些你还不知道的事
    Dubbo透传traceId/logid的一种思路
    当BeanUtils遇到泛型
    Oval框架如何校验枚举类型的一种思路
    HttpClient(4.5.x)正确的使用姿势
    HttpClient官方sample代码的深入分析(连接池)
    Jaxb如何优雅的处理CData
    JAXB性能优化
    Jaxb对xml报文头的小修小改
  • 原文地址:https://www.cnblogs.com/master-song/p/9085669.html
Copyright © 2011-2022 走看看