Dictionary vs Object - which is more efficient and why?

后端 未结 8 811
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-29 15:55

What is more efficient in Python in terms of memory usage and CPU consumption - Dictionary or Object?

Background: I have to load huge amount of data

8条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-29 16:21

    Here are my test runs of the very nice script of @Jarrod-Chesney. For comparison, I also run it against python2 with "range" replaced by "xrange".

    By curiosity, I also added similar tests with OrderedDict (ordict) for comparison.

    Python 3.6.9:

    Time Taken = 0:00:04.971369,    profile_dict_of_nt,     Size = 944.27
    Time Taken = 0:00:05.743104,    profile_list_of_nt,     Size = 1,066.93
    Time Taken = 0:00:02.524507,    profile_dict_of_dict,   Size = 1,920.35
    Time Taken = 0:00:02.123801,    profile_list_of_dict,   Size = 1,760.9
    Time Taken = 0:00:05.374294,    profile_dict_of_obj,    Size = 1,532.12
    Time Taken = 0:00:04.517245,    profile_list_of_obj,    Size = 1,441.04
    Time Taken = 0:00:04.590298,    profile_dict_of_slot,   Size = 1,030.09
    Time Taken = 0:00:04.197425,    profile_list_of_slot,   Size = 870.67
    
    Time Taken = 0:00:08.833653,    profile_ordict_of_ordict, Size = 3,045.52
    Time Taken = 0:00:11.539006,    profile_list_of_ordict, Size = 2,722.34
    Time Taken = 0:00:06.428105,    profile_ordict_of_obj,  Size = 1,799.29
    Time Taken = 0:00:05.559248,    profile_ordict_of_slot, Size = 1,257.75
    

    Python 2.7.15+:

    Time Taken = 0:00:05.193900,    profile_dict_of_nt,     Size = 906.0
    Time Taken = 0:00:05.860978,    profile_list_of_nt,     Size = 1,177.0
    Time Taken = 0:00:02.370905,    profile_dict_of_dict,   Size = 2,228.0
    Time Taken = 0:00:02.100117,    profile_list_of_dict,   Size = 2,036.0
    Time Taken = 0:00:08.353666,    profile_dict_of_obj,    Size = 2,493.0
    Time Taken = 0:00:07.441747,    profile_list_of_obj,    Size = 2,337.0
    Time Taken = 0:00:06.118018,    profile_dict_of_slot,   Size = 1,117.0
    Time Taken = 0:00:04.654888,    profile_list_of_slot,   Size = 964.0
    
    Time Taken = 0:00:59.576874,    profile_ordict_of_ordict, Size = 7,427.0
    Time Taken = 0:10:25.679784,    profile_list_of_ordict, Size = 11,305.0
    Time Taken = 0:05:47.289230,    profile_ordict_of_obj,  Size = 11,477.0
    Time Taken = 0:00:51.485756,    profile_ordict_of_slot, Size = 11,193.0
    

    So, on both major versions, the conclusions of @Jarrod-Chesney are still looking good.

提交回复
热议问题