{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/19-11-29-iimmutable-and-mutable2/",
    "result": {"data":{"site":{"siteMetadata":{"title":"irrationnelle","author":"irrationnelle","siteUrl":"https://dev.rase.blog","comment":{"disqusShortName":"","utterances":"irrationnelle/devlog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"8ff6225f-63ff-5e5f-a576-03f9f6084394","excerpt":"의자 바꾸기 문제 개발자들 사이의 농담이 하나 있다. 개발자 두 명이 있을 때 서로 의자를 바꾸기 위해서는 의자가…","html":"<h1 id=\"의자-바꾸기-문제\" style=\"position:relative;\"><a href=\"#%EC%9D%98%EC%9E%90-%EB%B0%94%EA%BE%B8%EA%B8%B0-%EB%AC%B8%EC%A0%9C\" aria-label=\"의자 바꾸기 문제 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>의자 바꾸기 문제</h1>\n<p>개발자들 사이의 농담이 하나 있다.</p>\n<p>개발자 두 명이 있을 때 서로 의자를 바꾸기 위해서는 의자가 3개가 필요하다는 것이다.</p>\n<p>이른바 변수의 값을 서로 바꾸는 <code class=\"language-text\">swap</code> 이라는 상황인데,</p>\n<p>사람은 의자에서 일어나 규정되지 않은 공간 위에서 잠시 서있다가 다른 의자로 옮겨 갈 수 있지만</p>\n<p>변수는 그게 안 된다. 변수 입장에서 규정되지 않은 공간이라는 건 존재하지 않으며</p>\n<p>반드시 메모리 어디에 위치하고 있어야 하기 때문이다.</p>\n<p>그래서 사람은 이게 되지만</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">의자<span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Louie'</span>\n의자<span class=\"token number\">2</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Tylo'</span>\n\n의자<span class=\"token number\">1</span> <span class=\"token operator\">=</span> 의자<span class=\"token number\">2</span> <span class=\"token comment\"># 의자2에 있던 값, 즉 의자2에 있는 Tylo를 의자1에다 옮긴다.</span>\n의자<span class=\"token number\">2</span> <span class=\"token operator\">=</span> 의자<span class=\"token number\">1</span> <span class=\"token comment\"># 의자1에 있던 값, 즉 의자1에 있는 Louie를 의자2에다 옮긴다.</span></code></pre></div>\n<p>변수는 이게 안 된다. 사실 너무 당연하거라서 내가 지금 이상한 예를 만들어 억지를 부리는 게 아닌가 싶을 정도다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">chair1 <span class=\"token operator\">=</span> <span class=\"token string\">'Louie'</span>\nchair2 <span class=\"token operator\">=</span> <span class=\"token string\">'Tylo'</span>\n\nchair1 <span class=\"token operator\">=</span> chair2\nchair2 <span class=\"token operator\">=</span> chair1 \n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>chair1<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>chair2<span class=\"token punctuation\">)</span></code></pre></div>\n<p>결과값:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">Tylo\nTylo</code></pre></div>\n<p>chair2에 chair1의 값을 넣으려는 순간, 이미 chair1은 바로 윗줄에서 chair2의 값, 즉 ‘Tylo’가 되었기 때문에</p>\n<p>chair2는 chair1이 가지고 있는 값인 ‘Tylo’의 값을 가지게 된다.</p>\n<p>그래서 이 문제를 해결하려면 임시로 변수의 값을 보관하기 위한 변수가 필요하다.</p>\n<p>보통 예제로 쓸 때 이 임시 변수의 이름을 <code class=\"language-text\">temp</code> 나 <code class=\"language-text\">tmp</code> 라고 많이 적는다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">chair1 <span class=\"token operator\">=</span> <span class=\"token string\">'Louie'</span>\nchair2 <span class=\"token operator\">=</span> <span class=\"token string\">'Tylo'</span>\ntmp <span class=\"token operator\">=</span> <span class=\"token boolean\">None</span>\n\ntmp <span class=\"token operator\">=</span> chair1\nchair1 <span class=\"token operator\">=</span> chair2\nchair2 <span class=\"token operator\">=</span> tmp\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>chair1<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>chair2<span class=\"token punctuation\">)</span></code></pre></div>\n<p>이러면 임시변수 <code class=\"language-text\">tmp</code> 가 chair1 의 값을 보관해준다.</p>\n<p>그래서 chair2에는 <code class=\"language-text\">tmp</code> 가 가지고 있는 과거의 chair1 값을 전달하는 것이 가능해진다.</p>\n<h1 id=\"반복적인-의자-바꾸기의-슬픈-사례\" style=\"position:relative;\"><a href=\"#%EB%B0%98%EB%B3%B5%EC%A0%81%EC%9D%B8-%EC%9D%98%EC%9E%90-%EB%B0%94%EA%BE%B8%EA%B8%B0%EC%9D%98-%EC%8A%AC%ED%94%88-%EC%82%AC%EB%A1%80\" aria-label=\"반복적인 의자 바꾸기의 슬픈 사례 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>반복적인 의자 바꾸기의 슬픈 사례</h1>\n<p>어느 날 선생님께서 조용히 말씀하신다.</p>\n<blockquote>\n<p>내일부터는 자리 배치를 서로 맘에 드는 사람끼리 앉도록 하거라\n대신 둘 중에 어느 한쪽이라도 맘에 들지 않는다면 즉시 자리를 바꾸도록 한다</p>\n</blockquote>\n<p>Louie 는 전부터 함께 앉고 싶었던 Ines 의 옆자리에 앉았다.</p>\n<p>Ines 는 자리를 바꾸기를 희망했고 그래서 Kike 랑 Louie 가 자리를 바꾸게 되었다.</p>\n<p>그래서 Kike 와 자리를 바꿨더니 옆자리에는 착한 Bea 가 있다. Bea 가 미안한 표정으로 이야기 한다.</p>\n<p>예전부터 Roberta 랑 같이 앉기로 해서 이번에는 자리를 좀 양보해줬으면 좋겠다고.</p>\n<p>그래서 Roberta 랑 자리를 바꾸니 옆에는 Borja 가 있다. Borja 가 입을 여는 순간에 Louie 는 직감한다.</p>\n<p>또 자리를 바꾸겠구나! 이걸 코드로 나타내면 대체 몇줄이나 작성해야 하는 거야?!</p>\n<p>일단은 해보자</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">tmp <span class=\"token operator\">=</span> <span class=\"token boolean\">None</span>\nchair1 <span class=\"token operator\">=</span> <span class=\"token boolean\">None</span>\nchair2 <span class=\"token operator\">=</span> <span class=\"token string\">'Louie'</span>\nchair3 <span class=\"token operator\">=</span> <span class=\"token string\">'Ines'</span>\nchair4 <span class=\"token operator\">=</span> <span class=\"token string\">'Kike'</span>\nchair5 <span class=\"token operator\">=</span> <span class=\"token string\">'Bea'</span>\nchair6 <span class=\"token operator\">=</span> <span class=\"token string\">'Roberta'</span>\nchair7 <span class=\"token operator\">=</span> <span class=\"token string\">'Borja'</span>\n\n<span class=\"token comment\"># Ines 옆자리인 Chair1 에 'Louie'가 간다</span>\nchair1 <span class=\"token operator\">=</span> <span class=\"token string\">'Louie'</span>\n\n<span class=\"token comment\"># 곧 다시 Kike와 자리를 바꾼다</span>\ntmp <span class=\"token operator\">=</span> chair1\nchair1 <span class=\"token operator\">=</span> chair4\nchair4 <span class=\"token operator\">=</span> tmp\n\n<span class=\"token comment\"># 다시 또 Roberta 와 자리를 바꾼다</span>\ntmp <span class=\"token operator\">=</span> chair4\nchair4 <span class=\"token operator\">=</span> chair6\nchair4 <span class=\"token operator\">=</span> tmp\n\n<span class=\"token comment\"># 언제까지 이 자리 바꾸기를 반복하는 걸까? </span></code></pre></div>\n<p>Louie 는 결심한다. 자리 바꾸기가 반복된다면 함수로 만들어서 쉽게 쉽게 자리를 바꾸자고.</p>\n<p>그래서 다음과 같은 함수를 만들었다.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">swap_chair</span><span class=\"token punctuation\">(</span>one_chair<span class=\"token punctuation\">,</span> another_chair<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n   temporary_chair <span class=\"token operator\">=</span> one_chair\n   one_chair <span class=\"token operator\">=</span> another_chair\n   aonther_chair <span class=\"token operator\">=</span> temporary_chair </code></pre></div>\n<p>이제 의자 바꿀 일이 생기면 이 함수를 사용해서 쉽게 쉽게 자리를 바꿀 수 있다!</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># 의자 변수 목록 생략</span>\n\nchair1 <span class=\"token operator\">=</span> chair2\nswap_chair<span class=\"token punctuation\">(</span>chair1<span class=\"token punctuation\">,</span> chair4<span class=\"token punctuation\">)</span>\nswap_chair<span class=\"token punctuation\">(</span>chair4<span class=\"token punctuation\">,</span> chair6<span class=\"token punctuation\">)</span></code></pre></div>\n<p>와 정말 간결하다!</p>\n<p>하지만 실제로 이 함수를 이용하고 나면</p>\n<p>Ines 가 옆자리에서 어리둥절한 얼굴로 보고 있을 거다.</p>\n<p>자리 바꾸기가 전혀 이루어지지 않았기 때문이다.</p>\n<p>왜 자리 바꾸기 함수를 호출했는데도 자리가 그대로 남아있게 된걸까?</p>\n<h1 id=\"인자로-immutable-한-변수-보내기와-mutable-한-변수-보내기\" style=\"position:relative;\"><a href=\"#%EC%9D%B8%EC%9E%90%EB%A1%9C-immutable-%ED%95%9C-%EB%B3%80%EC%88%98-%EB%B3%B4%EB%82%B4%EA%B8%B0%EC%99%80-mutable-%ED%95%9C-%EB%B3%80%EC%88%98-%EB%B3%B4%EB%82%B4%EA%B8%B0\" aria-label=\"인자로 immutable 한 변수 보내기와 mutable 한 변수 보내기 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>인자로 immutable 한 변수 보내기와 mutable 한 변수 보내기</h1>\n<p>변수 중에는 immutable 한 것이 있고 mutable 한 것이 있다고 했다.</p>\n<p>immutable 한 변수는 상태를 바꾸는 것 뿐만 아니라 값을 전달할 때도 <code class=\"language-text\">값 자체</code> 를 전달한다.</p>\n<p>그래서 함수의 매개변수가 받는 immutable 한 인자는 함수 내부에서는 사실 별개의 변수라고 보면 된다.</p>\n<p>결국 함수 내부에서 <em>인자와 같은 값을 가졌을 뿐인 별개의</em> 변수들끼리 자리를 바꿔봤자 함수 외부에는 영향을 미치지 않는다.</p>\n<p>그럼 mutable 한 변수는 어떨까? 과거에는 mutable 한 변수로 <code class=\"language-text\">list</code> 를 이용했는데 이번에는 <code class=\"language-text\">dictionary</code> 를 이용해보자.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">swap_dict_chair</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">dict</span><span class=\"token punctuation\">,</span> chair1<span class=\"token punctuation\">,</span> chair2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    tmp <span class=\"token operator\">=</span> <span class=\"token builtin\">dict</span><span class=\"token punctuation\">[</span>chair1<span class=\"token punctuation\">]</span>\n    <span class=\"token builtin\">dict</span><span class=\"token punctuation\">[</span>chair1<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">dict</span><span class=\"token punctuation\">[</span>chair2<span class=\"token punctuation\">]</span>\n    <span class=\"token builtin\">dict</span><span class=\"token punctuation\">[</span>chair2<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> tmp \n\nchair_dict <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token string\">'chair1'</span> <span class=\"token punctuation\">:</span> <span class=\"token boolean\">None</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'chair2'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Louie'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'chair3'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Ines'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'chair4'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Kike'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'chair5'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Bea'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'chair6'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Roberta'</span><span class=\"token punctuation\">,</span>\n    <span class=\"token string\">'chair7'</span> <span class=\"token punctuation\">:</span> <span class=\"token string\">'Borja'</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>chair_dict<span class=\"token punctuation\">)</span>\n\nswap_dict_chair<span class=\"token punctuation\">(</span>chair_dict<span class=\"token punctuation\">,</span> <span class=\"token string\">'chair2'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'chair4'</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>chair_dict<span class=\"token punctuation\">)</span>\n    \nswap_dict_chair<span class=\"token punctuation\">(</span>chair_dict<span class=\"token punctuation\">,</span> <span class=\"token string\">'chair4'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'chair6'</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>chair_dict<span class=\"token punctuation\">)</span></code></pre></div>\n<p>그럼 결과가 다음과 같이 나온다</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token punctuation\">{</span><span class=\"token string\">'chair1'</span><span class=\"token builtin class-name\">:</span> None, <span class=\"token string\">'chair2'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Louie'</span>, <span class=\"token string\">'chair3'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Ines'</span>, <span class=\"token string\">'chair4'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Kike'</span>, <span class=\"token string\">'chair5'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Bea'</span>, <span class=\"token string\">'chair6'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Roberta'</span>, <span class=\"token string\">'chair7'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Borja'</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">{</span><span class=\"token string\">'chair1'</span><span class=\"token builtin class-name\">:</span> None, <span class=\"token string\">'chair2'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Kike'</span>, <span class=\"token string\">'chair3'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Ines'</span>, <span class=\"token string\">'chair4'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Louie'</span>, <span class=\"token string\">'chair5'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Bea'</span>, <span class=\"token string\">'chair6'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Roberta'</span>, <span class=\"token string\">'chair7'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Borja'</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">{</span><span class=\"token string\">'chair1'</span><span class=\"token builtin class-name\">:</span> None, <span class=\"token string\">'chair2'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Kike'</span>, <span class=\"token string\">'chair3'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Ines'</span>, <span class=\"token string\">'chair4'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Roberta'</span>, <span class=\"token string\">'chair5'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Bea'</span>, <span class=\"token string\">'chair6'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Louie'</span>, <span class=\"token string\">'chair7'</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">'Borja'</span><span class=\"token punctuation\">}</span></code></pre></div>\n<p><code class=\"language-text\">mutable</code> 한 성격을 가지고 있는 <code class=\"language-text\">dictionary</code> 타입의 <code class=\"language-text\">chair_dict</code> 의 값이 변한 것을 알 수 있다.</p>\n<h1 id=\"참조reference\" style=\"position:relative;\"><a href=\"#%EC%B0%B8%EC%A1%B0reference\" aria-label=\"참조reference permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>참조(reference)</h1>\n<p>이처럼 <code class=\"language-text\">mutable</code> 한 속성을 가진 타입의 변수를 함수의 인자로 전달하는 경우,</p>\n<p>함수 내부에서는 인자의 <em>값을 복사하지 않는다</em>.</p>\n<p>대신 <code class=\"language-text\">mutable</code> 한 인자를 받는 경우 함수는 인자가 <em>가리키는 주소를 알게 되는데</em>,</p>\n<p>보통 개발 용어로 이걸 <code class=\"language-text\">참조(reference)</code> 라고 한다.</p>\n<p>약간 이상한 예를 들자면,</p>\n<p><code class=\"language-text\">immutable</code> 한 값을 인자로 받는 함수는 <em>다른 공간에다가 학생들을 복제하여</em> 복제한 학생들로 자리를 바꾸는 거고</p>\n<p><code class=\"language-text\">mutable</code> 한 값을 인자로 받는 함수는 <em>학생들이 있는 반으로 찾아가서</em> 기존에 바꾸려고 의도했던 반에 있는 학생들로 자리를 바꾸는 것이다.</p>\n<p>그래서 함수가 <code class=\"language-text\">값에 의해 호출(call by value)</code> 하는지, <code class=\"language-text\">참조에 의해 호출(call by reference)</code> 하는지 확실히 알고 있지 않으면 함수를 의도대로 제어할 수 없으며</p>\n<p>파이썬의 경우 인자가 immutable 이냐 mutable 이냐에 따라서 호출 방식을 결정하는 <code class=\"language-text\">call by assignment</code> 라고 한다.</p>\n<h1 id=\"마치며\" style=\"position:relative;\"><a href=\"#%EB%A7%88%EC%B9%98%EB%A9%B0\" aria-label=\"마치며 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>마치며</h1>\n<p>위의 의자 바꾸기 코드들 중 몇 개에는 버그까지는 아니지만</p>\n<p><em>상식적인 상황이라고 가정하면</em> 이상한 결과를 만들어내는 것이 있다.</p>\n<p>그것이 무엇일까? 힌트는 영화 매트릭스이다.</p>","frontmatter":{"title":"의자 바꾸기로 생각하는 인자 전달","date":"November 29, 2019"}}},"pageContext":{"slug":"/19-11-29-iimmutable-and-mutable2/","previous":{"fields":{"slug":"/19-11-27-call-by-value-refrence-deep-shallow-copy/"},"frontmatter":{"title":"immutable 과 mutable","category":"Python","draft":false}},"next":{"fields":{"slug":"/19-12-08-namespace-and-scope/"},"frontmatter":{"title":"네임스페이스와 함수","category":"Python","draft":false}}}},
    "staticQueryHashes": ["3128451518","3474900066"]}