Fastest way to copy dict of lists
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
|
show 5 more comments
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
1
Did you time it againstcopy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from usingtimeitto 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 methodcopyon list's__dict__. But this will not give you big speed up.
– sashaaero
Nov 13 '18 at 23:15
@roganjosh:deepcopytakes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermoredeepcopyneeds 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,deepcopywill 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. Asomelist.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
|
show 5 more comments
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
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
python dictionary copy
asked Nov 13 '18 at 23:07
aprosperoaprospero
374
374
1
Did you time it againstcopy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from usingtimeitto 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 methodcopyon list's__dict__. But this will not give you big speed up.
– sashaaero
Nov 13 '18 at 23:15
@roganjosh:deepcopytakes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermoredeepcopyneeds 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,deepcopywill 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. Asomelist.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
|
show 5 more comments
1
Did you time it againstcopy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from usingtimeitto 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 methodcopyon list's__dict__. But this will not give you big speed up.
– sashaaero
Nov 13 '18 at 23:15
@roganjosh:deepcopytakes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermoredeepcopyneeds 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,deepcopywill 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. Asomelist.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
|
show 5 more comments
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
1
Did you time it against
copy.deepcopy()? I suspect your approach is slower, but there's nothing stopping you from usingtimeitto 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 methodcopyon list's__dict__. But this will not give you big speed up.– sashaaero
Nov 13 '18 at 23:15
@roganjosh:
deepcopytakes considerable time, especially since it has to check all the elements in the list to see if these should not be copied to. Furthermoredeepcopyneeds 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,
deepcopywill 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. Asomelist.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