元组,列表,字典,集合比较内存大小

  • 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
posted @ 2020-12-11 10:22  ty1539  阅读(541)  评论(0编辑  收藏  举报