Fastest way to copy dict of lists










0















I have a 70 element dictionary a formed by lists of 4 integer numbers, so that:



import random
a = k: [random.randint(0,2) for _ in range(4)] for k in range(70)


Is there a fastest way than k: a[k].copy() for k in a to deepcopy the dictionary?










share|improve this question

















  • 1





    Did you time it against copy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from using timeit to test it yourself and clarifying the question with the results.

    – roganjosh
    Nov 13 '18 at 23:11












  • Note that there is no need to use a dict if the keys are simply incremental numbers. Use a list instead in this case.

    – blhsing
    Nov 13 '18 at 23:13











  • a[k][:] will work faster cause there is no need to find method copy on list's __dict__. But this will not give you big speed up.

    – sashaaero
    Nov 13 '18 at 23:15












  • @roganjosh: deepcopy takes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermore deepcopy needs to do some extra bookkeeping.

    – Willem Van Onsem
    Nov 13 '18 at 23:18






  • 1





    @roganjosh: what I mean is that if such sublist would contain objects, deepcopy will make an extra copy of these objects as well, and if these objects refer to others, these are copied, etc. This thus can sometimes result in a huge amount of new objects. A somelist.copy() does not need to inspect (nor clone) the individual elements of the sublist. It only copies the references (and increments the reference counter).

    – Willem Van Onsem
    Nov 13 '18 at 23:27















0















I have a 70 element dictionary a formed by lists of 4 integer numbers, so that:



import random
a = k: [random.randint(0,2) for _ in range(4)] for k in range(70)


Is there a fastest way than k: a[k].copy() for k in a to deepcopy the dictionary?










share|improve this question

















  • 1





    Did you time it against copy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from using timeit to test it yourself and clarifying the question with the results.

    – roganjosh
    Nov 13 '18 at 23:11












  • Note that there is no need to use a dict if the keys are simply incremental numbers. Use a list instead in this case.

    – blhsing
    Nov 13 '18 at 23:13











  • a[k][:] will work faster cause there is no need to find method copy on list's __dict__. But this will not give you big speed up.

    – sashaaero
    Nov 13 '18 at 23:15












  • @roganjosh: deepcopy takes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermore deepcopy needs to do some extra bookkeeping.

    – Willem Van Onsem
    Nov 13 '18 at 23:18






  • 1





    @roganjosh: what I mean is that if such sublist would contain objects, deepcopy will make an extra copy of these objects as well, and if these objects refer to others, these are copied, etc. This thus can sometimes result in a huge amount of new objects. A somelist.copy() does not need to inspect (nor clone) the individual elements of the sublist. It only copies the references (and increments the reference counter).

    – Willem Van Onsem
    Nov 13 '18 at 23:27













0












0








0








I have a 70 element dictionary a formed by lists of 4 integer numbers, so that:



import random
a = k: [random.randint(0,2) for _ in range(4)] for k in range(70)


Is there a fastest way than k: a[k].copy() for k in a to deepcopy the dictionary?










share|improve this question














I have a 70 element dictionary a formed by lists of 4 integer numbers, so that:



import random
a = k: [random.randint(0,2) for _ in range(4)] for k in range(70)


Is there a fastest way than k: a[k].copy() for k in a to deepcopy the dictionary?







python dictionary copy






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 13 '18 at 23:07









aprosperoaprospero

374




374







  • 1





    Did you time it against copy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from using timeit to test it yourself and clarifying the question with the results.

    – roganjosh
    Nov 13 '18 at 23:11












  • Note that there is no need to use a dict if the keys are simply incremental numbers. Use a list instead in this case.

    – blhsing
    Nov 13 '18 at 23:13











  • a[k][:] will work faster cause there is no need to find method copy on list's __dict__. But this will not give you big speed up.

    – sashaaero
    Nov 13 '18 at 23:15












  • @roganjosh: deepcopy takes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermore deepcopy needs to do some extra bookkeeping.

    – Willem Van Onsem
    Nov 13 '18 at 23:18






  • 1





    @roganjosh: what I mean is that if such sublist would contain objects, deepcopy will make an extra copy of these objects as well, and if these objects refer to others, these are copied, etc. This thus can sometimes result in a huge amount of new objects. A somelist.copy() does not need to inspect (nor clone) the individual elements of the sublist. It only copies the references (and increments the reference counter).

    – Willem Van Onsem
    Nov 13 '18 at 23:27












  • 1





    Did you time it against copy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from using timeit to test it yourself and clarifying the question with the results.

    – roganjosh
    Nov 13 '18 at 23:11












  • Note that there is no need to use a dict if the keys are simply incremental numbers. Use a list instead in this case.

    – blhsing
    Nov 13 '18 at 23:13











  • a[k][:] will work faster cause there is no need to find method copy on list's __dict__. But this will not give you big speed up.

    – sashaaero
    Nov 13 '18 at 23:15












  • @roganjosh: deepcopy takes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermore deepcopy needs to do some extra bookkeeping.

    – Willem Van Onsem
    Nov 13 '18 at 23:18






  • 1





    @roganjosh: what I mean is that if such sublist would contain objects, deepcopy will make an extra copy of these objects as well, and if these objects refer to others, these are copied, etc. This thus can sometimes result in a huge amount of new objects. A somelist.copy() does not need to inspect (nor clone) the individual elements of the sublist. It only copies the references (and increments the reference counter).

    – Willem Van Onsem
    Nov 13 '18 at 23:27







1




1





Did you time it against copy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from using timeit to test it yourself and clarifying the question with the results.

– roganjosh
Nov 13 '18 at 23:11






Did you time it against copy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from using timeit to test it yourself and clarifying the question with the results.

– roganjosh
Nov 13 '18 at 23:11














Note that there is no need to use a dict if the keys are simply incremental numbers. Use a list instead in this case.

– blhsing
Nov 13 '18 at 23:13





Note that there is no need to use a dict if the keys are simply incremental numbers. Use a list instead in this case.

– blhsing
Nov 13 '18 at 23:13













a[k][:] will work faster cause there is no need to find method copy on list's __dict__. But this will not give you big speed up.

– sashaaero
Nov 13 '18 at 23:15






a[k][:] will work faster cause there is no need to find method copy on list's __dict__. But this will not give you big speed up.

– sashaaero
Nov 13 '18 at 23:15














@roganjosh: deepcopy takes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermore deepcopy needs to do some extra bookkeeping.

– Willem Van Onsem
Nov 13 '18 at 23:18





@roganjosh: deepcopy takes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermore deepcopy needs to do some extra bookkeeping.

– Willem Van Onsem
Nov 13 '18 at 23:18




1




1





@roganjosh: what I mean is that if such sublist would contain objects, deepcopy will make an extra copy of these objects as well, and if these objects refer to others, these are copied, etc. This thus can sometimes result in a huge amount of new objects. A somelist.copy() does not need to inspect (nor clone) the individual elements of the sublist. It only copies the references (and increments the reference counter).

– Willem Van Onsem
Nov 13 '18 at 23:27





@roganjosh: what I mean is that if such sublist would contain objects, deepcopy will make an extra copy of these objects as well, and if these objects refer to others, these are copied, etc. This thus can sometimes result in a huge amount of new objects. A somelist.copy() does not need to inspect (nor clone) the individual elements of the sublist. It only copies the references (and increments the reference counter).

– Willem Van Onsem
Nov 13 '18 at 23:27












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53290842%2ffastest-way-to-copy-dict-of-lists%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53290842%2ffastest-way-to-copy-dict-of-lists%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







這個網誌中的熱門文章

What does pagestruct do in Eviews?

Dutch intervention in Lombok and Karangasem

Channel Islands