2012-11-09 3 views
3

나는 채워진 사전의 크기를 파이썬으로 얻고 싶습니다. 나는 이것을 시도했다 :채워진 사전의 크기 가져 오기

>>> dict = {'1':1} 
>>> import sys 
>>> print dict 
{'1': 1} 
>>> sys.getsizeof(dict) 
140 

그러나 이것은 명백하게 그것을하지 않을 것이다. 기대 값은 2 (Bytes)입니다. 다음과 같은 내용의 사전을 가지고 있습니다 :

{'L\xa3\x93': '\x15\x015\x02\x00\x00\x00\x01\x02\x02\x04\x1f\x01=\x00\x9d\x00^\x00e\x04\x00\x0b', '\\\xe7\xe6': '\x15\x01=\x02\x00\x00\x00\x01\x02\x02\x04\x1f\x01B\x00\xa1\x00_\x00c\x04\x02\x17', '\\\xe8"': '\x15\xff\x1d\x02\x00\x00\x00\x01\x02\x02\x04\x1f\x01:\x00\x98\x00Z\x00_\x04\x02\x0b', '\\\[email protected]': '\x15\x014\x02\x00\x00\x00\x01\x02\x02\x04\x1f\[email protected]\x00\x9c\x00\\\x00b\x04\x00\x0b'} 

그리고 나는 얼마나 많은 바이트의 데이터를 보내야하는지 알고 싶습니다. 내 색인은 6 바이트이지만 콘텐츠의 길이는 얼마입니까? 여기서 인덱스 당 46Bytes임을 알기 때문에 4 * (6 + 46) Byte를 전송해야한다는 것을 알고 싶습니다. 어떻게하면됩니까? 내가 바이트에 의해 콘텐츠 바이트를 전송해야 할 때

덕분에, 론

+4

왜 크기가 2 바이트가 될 것으로 예상합니까? 데이터가 두 번째 예제에서와 같이 바이트 문자열이면'len (dict [key]) '를 사용하여 길이를 바이트 단위로 가져올 수 있지만 dict의 특정 값의 바이트 단위 길이는 크기와 동일하지 않습니다 그 자체의 dict. – BrenBarn

+1

네트워크 등으로 보내야합니까? 크기는 직렬화 방식에 따라 다릅니다. – tzaman

+0

어떻게 46 바이트와 6 바이트를 얻고 있습니까? # [23, 23, 23, 23]'과'print ([len (x) for d.values ​​()]의 두 배입니다. # [3, 3, 3, 3]' – mgilson

답변

2

그래서 만이 나에게 실제 길이를 제공합니까?

#non_mem_macs is my dictionary 
for idx in non_mem_macs: 
    non_mem_macs_len += len(hexlify(idx)) 
    non_mem_macs_len += len(hexlify(non_mem_macs[idx]))