zoukankan      html  css  js  c++  java
  • 元组,列表,字典,集合比较内存大小

    • set(),list(),tuple() 方法只接受一个值,这个值可以是列表或者是元组, 否则报错 TypeError: set expected at most 1 arguments, got 3
    • dict() 方法接受相当于默认参数,key不用引号'',用=号相连
    • sys.getsizeof() 比较中,发现占用内存从小到大依次是:元组,列表,集合,字典

    In [123]: import sys
    
    In [127]: a_dict = dict(a='a1',b='b1',c='c1')
    
    In [128]: a_dict
    Out[128]: {'a': 'a1', 'b': 'b1', 'c': 'c1'}
    
    In [129]: a_set = set('a','b','c')
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-129-2f7cc4a81ed4> in <module>()
    ----> 1 a_set = set('a','b','c')
    
    TypeError: set expected at most 1 arguments, got 3
    
    In [130]: a_set = set(('a','b','c'))
    
    In [131]: a_set
    Out[131]: {'a', 'b', 'c'}
    
    In [132]: a_list = list('a1','a2','a3')
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-132-3e099cee627d> in <module>()
    ----> 1 a_list = list('a1','a2','a3')
    
    TypeError: list() takes at most 1 argument (3 given)
    
    In [133]: a_list = list(('a1','a2','a3'))
    
    In [134]: a_list
    Out[134]: ['a1', 'a2', 'a3']
    
    In [135]: a_list = tuple('a1','a2','a3')
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-135-df0623f0640f> in <module>()
    ----> 1 a_list = tuple('a1','a2','a3')
    
    TypeError: tuple() takes at most 1 argument (3 given)
    
    In [136]: a_list = tuple(('a1','a2','a3'))
    
    In [137]: a_list = list(('a1','a2','a3'))
    
    In [138]: a_tuple = tuple(('a1','a2','a3'))
    
    In [139]: a_tuple
    Out[139]: ('a1', 'a2', 'a3')
    
    In [140]: getsizeof(a_tuple),getsizeof(a_list),getsizeof(a_dict),getsizeof(a_set)
    ---------------------------------------------------------------------------
    NameError                                 Traceback (most recent call last)
    <ipython-input-140-e700af696dcc> in <module>()
    ----> 1 getsizeof(a_tuple),getsizeof(a_list),getsizeof(a_dict),getsizeof(a_set)
    
    NameError: name 'getsizeof' is not defined
    
    In [141]: sys.getsizeof(a_tuple),sys.getsizeof(a_list),sys.getsizeof(a_dict),sys.getsizeof(a_set)
    Out[141]: (72, 112, 272, 224)
    
    In [142]:
    

    dict的用法:

    >>>dict()                        # 创建空字典
    {}
    >>> dict(a='a', b='b', t='t')     # 传入关键字
    {'a': 'a', 'b': 'b', 't': 't'}
    >>> dict(zip(['one', 'two', 'three'], [1, 2, 3]))   # 映射函数方式来构造字典
    {'three': 3, 'two': 2, 'one': 1} 
    >>> dict([('one', 1), ('two', 2), ('three', 3)])    # 可迭代对象方式来构造字典
    {'three': 3, 'two': 2, 'one': 1}
    >>>
    

    dict 的错误用法

    In [142]: dict_2 = dict(1=11,2=12,3=13)
      File "<ipython-input-142-7080a8571a4e>", line 1
        dict_2 = dict(1=11,2=12,3=13)
    SyntaxError: keyword can't be an expression
    
    
    In [143]: dict_2 = dict(1='11',2='12',3='13')
      File "<ipython-input-143-1703496c46f8>", line 1
        dict_2 = dict(1='11',2='12',3='13')
    SyntaxError: keyword can't be an expression
    
    In [144]: a_dict = dict(a='a1',b='b1',c='c1')
    
    In [145]: dict_2 = dict('1'=11,'2'=12,'3'=13)
      File "<ipython-input-145-55327d34ed6c>", line 1
        dict_2 = dict('1'=11,'2'=12,'3'=13)
    SyntaxError: keyword can't be an expression
    
    In [147]: dict_2 = dict(a1=11,a2=12,a3=13)
    
    In [149]: dict_2
    Out[149]: {'a1': 11, 'a2': 12, 'a3': 13}
    
    In [150]:
    

    但是速度方面恰好相反: tuple < list < set < dict 数量多这样考虑才有意义,否则没意义

    In [172]: a_set = set(('a','b','c'))
    
    In [173]: a_list = list(('a1','a2','a3'))
    
    In [174]: a_tuple = tuple(('a1','a2','a3'))
    
    In [175]: a_dict
    Out[175]: {'a': 'a1', 'b': 'b1', 'c': 'c1'}
    
    In [176]: timeit 'a' in a_tuple
    The slowest run took 27.16 times longer than the fastest. This could mean that an intermediate result is being cached.
    10000000 loops, best of 3: 55.3 ns per loop
    
    In [177]: timeit 'a' in a_list
    10000000 loops, best of 3: 53.7 ns per loop
    
    In [178]: timeit 'a' in a_set
    10000000 loops, best of 3: 33.1 ns per loop
    
    In [179]: timeit 'a' in a_dict
    10000000 loops, best of 3: 36 ns per loop
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    如何减少网页首屏加载压力和时间
    如何解决网站因图片过大加载慢的问题?
    研究首屏时间?你先要知道这几点细节
    Nginx配置location总结及rewrite规则写法
    Nginx配置文件(nginx.conf)配置详解(2)
    Nginx配置文件nginx.conf中文详解
    Linux 命令 创建文件
    【TensorFlow-windows】(五) CNN(卷积神经网络)对cifar10的识别
    【TensorFlow-windows】(四) CNN(卷积神经网络)进行手写数字识别(mnist)
    【TensorFlow-windows】(三) 多层感知器进行手写数字识别(mnist)
  • 原文地址:https://www.cnblogs.com/heris/p/14112072.html
Copyright © 2011-2022 走看看