{"id":1895,"date":"2019-05-24T10:31:28","date_gmt":"2019-05-24T09:31:28","guid":{"rendered":"https:\/\/rosetta.vn\/short\/?p=1895"},"modified":"2019-05-24T10:31:28","modified_gmt":"2019-05-24T09:31:28","slug":"python-understanding-dict-copy-shallow-or-deep-stack-overflow","status":"publish","type":"post","link":"https:\/\/rosetta.vn\/short\/2019\/05\/24\/python-understanding-dict-copy-shallow-or-deep-stack-overflow\/","title":{"rendered":"python &#8211; Understanding dict.copy() &#8211; shallow or deep? &#8211; Stack Overflow"},"content":{"rendered":"<blockquote>\n<div class=\"post-text\">\n<p>By &#8220;shallow copying&#8221; it means the\u00a0<em>content<\/em>\u00a0of the dictionary is not copied by value, but just creating a new reference.<\/p>\n<pre class=\"lang-py prettyprint prettyprinted\"><code><span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> a <\/span><span class=\"pun\">=<\/span> <span class=\"pun\">{<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span><span class=\"lit\">2<\/span><span class=\"pun\">,<\/span><span class=\"lit\">3<\/span><span class=\"pun\">]}<\/span>\r\n<span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> b <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> a<\/span><span class=\"pun\">.<\/span><span class=\"pln\">copy<\/span><span class=\"pun\">()<\/span>\r\n<span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> a<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> b\r\n<\/span><span class=\"pun\">({<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">]},<\/span> <span class=\"pun\">{<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">]})<\/span>\r\n<span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> a<\/span><span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">].<\/span><span class=\"pln\">append<\/span><span class=\"pun\">(<\/span><span class=\"lit\">4<\/span><span class=\"pun\">)<\/span>\r\n<span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> a<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> b\r\n<\/span><span class=\"pun\">({<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">4<\/span><span class=\"pun\">]},<\/span> <span class=\"pun\">{<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">4<\/span><span class=\"pun\">]})<\/span><\/code><\/pre>\n<p>In contrast, a deep copy will copy all contents by value.<\/p>\n<pre class=\"lang-py prettyprint prettyprinted\"><code><span class=\"pun\">&gt;&gt;&gt;<\/span> <span class=\"kwd\">import<\/span><span class=\"pln\"> copy\r\n<\/span><span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> c <\/span><span class=\"pun\">=<\/span><span class=\"pln\"> copy<\/span><span class=\"pun\">.<\/span><span class=\"pln\">deepcopy<\/span><span class=\"pun\">(<\/span><span class=\"pln\">a<\/span><span class=\"pun\">)<\/span>\r\n<span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> a<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> c\r\n<\/span><span class=\"pun\">({<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">4<\/span><span class=\"pun\">]},<\/span> <span class=\"pun\">{<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">4<\/span><span class=\"pun\">]})<\/span>\r\n<span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> a<\/span><span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">].<\/span><span class=\"pln\">append<\/span><span class=\"pun\">(<\/span><span class=\"lit\">5<\/span><span class=\"pun\">)<\/span>\r\n<span class=\"pun\">&gt;&gt;&gt;<\/span><span class=\"pln\"> a<\/span><span class=\"pun\">,<\/span><span class=\"pln\"> c\r\n<\/span><span class=\"pun\">({<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">4<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">5<\/span><span class=\"pun\">]},<\/span> <span class=\"pun\">{<\/span><span class=\"lit\">1<\/span><span class=\"pun\">:<\/span> <span class=\"pun\">[<\/span><span class=\"lit\">1<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">2<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">3<\/span><span class=\"pun\">,<\/span> <span class=\"lit\">4<\/span><span class=\"pun\">]})<\/span><\/code><\/pre>\n<p>So:<\/p>\n<ol>\n<li><code>b = a<\/code>: Reference assignment, Make\u00a0<code>a<\/code>\u00a0and\u00a0<code>b<\/code>\u00a0points to the same object.\n<p><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/rosetta.vn\/short\/wp-content\/uploads\/sites\/3\/2019\/05\/4AQC6.png?w=750&#038;ssl=1\" alt=\"Illustration of 'a = b': 'a' and 'b' both point to '{1: L}', 'L' points to '[1, 2, 3]'.\" data-recalc-dims=\"1\" \/><\/li>\n<li><code>b = a.copy()<\/code>: Shallow copying,\u00a0<code>a<\/code>\u00a0and\u00a0<code>b<\/code>\u00a0will become two isolated objects, but their contents still share the same reference\n<p><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/rosetta.vn\/short\/wp-content\/uploads\/sites\/3\/2019\/05\/Vtk4m.png?w=750&#038;ssl=1\" alt=\"Illustration of 'b = a.copy()': 'a' points to '{1: L}', 'b' points to '{1: M}', 'L' and 'M' both point to '[1, 2, 3]'.\" data-recalc-dims=\"1\" \/><\/li>\n<li><code>b = copy.deepcopy(a)<\/code>: Deep copying,\u00a0<code>a<\/code>\u00a0and\u00a0<code>b<\/code>&#8216;s structure and content become completely isolated.\n<p><img decoding=\"async\" src=\"https:\/\/i0.wp.com\/rosetta.vn\/short\/wp-content\/uploads\/sites\/3\/2019\/05\/BO4qO.png?w=750&#038;ssl=1\" alt=\"Illustration of 'b = copy.deepcopy(a)': 'a' points to '{1: L}', 'L' points to '[1, 2, 3]'; 'b' points to '{1: M}', 'M' points to a different instance of '[1, 2, 3]'.\" data-recalc-dims=\"1\" \/><\/li>\n<\/ol>\n<\/div>\n<div class=\"grid mb0 fw-wrap ai-start jc-end gs8 gsy\"><time datetime=\"2010-10-20T06:54:38\"><\/time><\/p>\n<div class=\"grid--cell mr16\"><\/div>\n<\/div>\n<\/blockquote>\n<p>Source: <em><a href=\"https:\/\/stackoverflow.com\/questions\/3975376\/understanding-dict-copy-shallow-or-deep\">python &#8211; Understanding dict.copy() &#8211; shallow or deep? &#8211; Stack Overflow<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>By &#8220;shallow copying&#8221; it means the\u00a0content\u00a0of the dictionary is not copied by value, but just creating a new reference. &gt;&gt;&gt; a = {1: [1,2,3]} &gt;&gt;&gt; b = a.copy() &gt;&gt;&gt; a, b ({1: [1, 2, 3]}, {1: [1, 2, 3]}) &gt;&gt;&gt;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[30,215],"tags":[742,1254,222,1253],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p8jhJx-uz","_links":{"self":[{"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/posts\/1895"}],"collection":[{"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/comments?post=1895"}],"version-history":[{"count":1,"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/posts\/1895\/revisions"}],"predecessor-version":[{"id":1899,"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/posts\/1895\/revisions\/1899"}],"wp:attachment":[{"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/media?parent=1895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/categories?post=1895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rosetta.vn\/short\/wp-json\/wp\/v2\/tags?post=1895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}