반응형

[python] 얕은 복사(shallow copy)와 깊은 복사(deep copy)

 

https://wikidocs.net/16038

 

12. 얕은 복사(shallow copy)와 깊은 복사(deep copy)

## 1. mutable과 immutable 객체 객체에는 mutable과 immutable 객체가 있습니다. ❈ 객체 구분 표 class 설명 구분 l…

wikidocs.net

 

1. mutable과 immutable 객체

객체에는 mutable과 immutable 객체가 있습니다.

❈ 객체 구분 표

class설명구분

list mutable 한 순서가 있는 객체 집합 mutable
set mutable 한 순서가 없는 고유한 객체 집합 mutable
dict key와 value가 맵핑된 객체, 순서 없음 mutable
bool 참,거짓 immutable
int 정수 immutable
float 실수 immutable
tuple immutable 한 순서가 있는 객체 집합 immutable
str 문자열 immutable
frozenset immutable한 set immutable

일반 user가 작성한 class도 대부분 mutable 한 객체 입니다.
immutable한 클래를 만들기 위해서는 특별한 방법이 필요합니다.

https://stackoverflow.com/questions/4828080/how-to-make-an-immutable-object-in-python

  • REPL에서 mutable과 immutable에서 구분해봅시다. 몇가지만 해봅니다.
  • list 는 mutable 입니다.
  • 변수 a 에 1, 2, 3을 원소로 가지는 리스트를 할당하였습니다.
  • id는 변수의 메모리 주소값을 리턴해줍니다.
  • a의 첫번째 원소를 변경한 후에도 id값은 변경없이 a의 변수가 변경되었습니다.
>>> a = [1, 2, 3]
>>> id(a)
4393788808
>>> a[0] = 5
>>> a
[5, 2, 3]
>>> id(a)
4393788808
  • set도 mutable입니다.
  • |= set에서 or 연산입니다. 합집합이 됩니다.
  • 값은 변경되었으나 id는 변함없습니다.
>>> x = {1, 2, 3}
>>> x
{1, 2, 3}
>>> id(x)
4396095304
>>> x|={4,5,6}
>>> x
{1, 2, 3, 4, 5, 6}
>>> id(x)
4396095304
  • str은 immutable 입니다.
  • s 변수에 첫번째 글자를 변경 시도하면 에러가 발생합니다.
  • s에 다른 값을 할당하면, id가 변경됩니다. 재할당은 애초에 변수를 다시할당하는 것이므로 mutable과 immutable과는 다른 문제입니다. list또한 값을 재할당하면 id가 변경됩니다.
>>> s= "abc"
>>> s
'abc'
>>> id(s)
4387454680
>>> s[0]
'a'
>>> s[0] = 's'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> s = 'def'
>>> s
'def'
>>> id(s)
4388970768

2. 변수 간 대입

2-1 mutable한 객체의 변수 간 대입

  • list의 얕은 복사를 확인 해봅니다.
  • b 에 a를 할당하면 값이 할당되는 것이 아니라 같은 메모리 주소를 바라봅니다.
  • b를 변경하면 같이 a도 바뀝니다.
  • mutable한 다른 객체 또한 똑같은 현상이 나타납니다.
>>> a = [1, 2, 3]
>>> b = a # shallow copy
>>> b[0]= 5
>>> a
[5, 2, 3]
>>> b
[5, 2, 3]
>>> id(a)
4396179528
>>> id(b)
4396179528

2-2 immutable한 객체의 변수간 대입

  • str 문자열의 얕은 복사를 확인해봅니다.
  • list와 똑같이 b를 a에 할당하면 같은 메모리 주소를 바라보게 됩니다.
  • 하지만 b에 다른 값을 할당하면 재할당이 이루어지며 메모리 주소가 변경됩니다.
  • 고로 a와 b는 다른 값을 가집니다.
>>> a = "abc"
>>> b = a
>>> a
'abc'
>>> b
'abc'
>>> id(a)
4387454680
>>> id(b)
4387454680
>>> b = "abcd"
>>> a
'abc'
>>> b
'abcd'
>>> id(a)
4387454680
>>> id(b)
4396456400

3. 얕은 복사(shallow copy)

  • list의 슬라이싱을 통한 새로운 값을 할당해봅니다.
  • 아래의 결과와 같이 슬라이싱을 통해서 값을 할당하면 새로운 id가 부여되며, 서로 영향을 받지 않습니다.
>>> a = [1,2,3]
>>> b = a[:]
>>> id(a)
4396179528
>>> id(b)
4393788808
>>> a == b
True
>>> a is b
False
>>> b[0] = 5
>>> a
[1, 2, 3]
>>> b
[5, 2, 3]
  • 하지만, 이러한 슬라이싱 또한 얕은 복사에 해당합니다.
  • 리스트안에 리스트 mutable객체 안에 mutable객체인 경우 문제가 됩니다.
  • id(a) 값과 id(b) 값은 다르게 되었지만, 그 내부의 객체 id(a[0])과 id(b[0])은 같은 주소를 바라보고 있습니다.
>>> a = [[1,2], [3,4]]
>>> b = a[:]
>>> id(a)
4395624328
>>> id(b)
4396179592
>>> id(a[0])
4396116040
>>> id(b[0])
4396116040
  • 재할당하는 경우는 문제가 없습니다. 메모리 주소도 변경되었습니다.
>>> a[0] = [8,9]
>>> a
[[8, 9], [3, 4]]
>>> b
[[1, 2], [3, 4]]
>>> id(a[0])
4393788808
>>> id(b[0])
4396116040
  • 하지만, a[1] 에 값을 변경하면 b[1]도 따라 변경됩니다.
>>> a[1].append(5)
>>> a
[[8, 9], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]
>>> id(a[1])
4396389896
>>> id(b[1])
4396389896
  • copy 모듈의 copy 메소드 또한 얕은 복사입니다.
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.copy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]

4. 깊은 복사(deep copy)

  • 깊은 복사는 내부에 객체들까지 모두 새롭게 copy 되는 것입니다.
  • copy.deepcopy메소드가 해결해줍니다.
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.deepcopy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4]]




https://suwoni-codelab.com/python%20%EA%B8%B0%EB%B3%B8/2018/03/02/Python-Basic-copy/

 

반응형
반응형

다른 사람들이
나를 어떻게 평가하는지,
다른 사람에게 내가 어떻게 보이는지에
예민해집니다. 어떤 때는 사람들로부터 잠시 숨어
고요함과 평온을 즐기고도 싶지만 이제 머리를 비우고
쉴 곳을 찾을 기회는 드물어졌습니다. 그래서 요새
학생들은 쉬는 시간이면 화장실에 가서 가만히
앉아 있다 온다는 이야기를 종종 합니다. 다른
사람들의 소란스러운 눈을 피해 조용하게
머무를 수 있는 유일한 장소가
화장실이라는 것입니다.


- 조영태 외의 《초저출산은 왜 생겼을까?》 중에서 -


* 산사의 화장실을
해우소(解憂所)라 합니다.
'근심을 푸는 곳'이라는 뜻입니다.
누구의 방해도 받지 않고 오로지 홀로 쉴 수
있는 곳, 특별한 경우가 아니라면 온전히 허용 받을
수 있는 곳이 바로 화장실입니다. 요즘 아이들에게
화장실이 유일한 쉼터가 되고 있다는 사실이
안타깝습니다. 아이들의 해우소는
집과 학교여야 합니다.

반응형

'생활의 발견 > 아침편지' 카테고리의 다른 글

위험  (0) 2024.07.08
무엇이 우리 학생들을 멍들게 하는가  (0) 2024.07.05
아이는 어른의 거울이다  (0) 2024.07.03
병을 다시 얻는 이유  (0) 2024.07.02
기다리는 마음  (0) 2024.07.01
반응형

우리나라는 미국처럼
인종이나 성적 지향 등에 따라
소수집단이 생기는 경우가 드문 것 같지만
사실은 그렇지 않다. 자신만의 관점에 따라
다른 사람을 차별하는 사람도 많다. 게다가
하나의 교실 안에 각 가정의 가치관이 모두
모인다. 수업 중에 아이들이 보이는 반응은
가정에서 부모가 보이는 반응이나 관점과
매우 유사하다는 사실을
교사들은 알고 있다.


- 송은주의 《다시 일어서는 교실》 중에서 -


* 아이가 하는 말을 들으면
그 집안 어른의 수준과 성향을 가늠할 수 있습니다.
아이가 말을 배우고 문장을 구사할 즈음 마치 리트머스
시험지처럼 주변 어른의 언행이 그대로 배어 나옵니다.
말투, 억양, 톤, 내용까지 너무 닮아 있습니다.
아이들은 어른의 거울이란 말이 수긍이
됩니다. 학교 교실이라는 공간 이전에
가정 공동체가 갖는 교육 효과는
참으로 지대합니다.

반응형

'생활의 발견 > 아침편지' 카테고리의 다른 글

무엇이 우리 학생들을 멍들게 하는가  (0) 2024.07.05
해우소(解憂所)  (0) 2024.07.04
병을 다시 얻는 이유  (0) 2024.07.02
기다리는 마음  (0) 2024.07.01
낌새. 느낌이 온다  (0) 2024.07.01
반응형

진실로 치유되려면
몸과 마음, 영혼까지 모두
포함되어야 합니다. 만일 질병을
'치료'하는 데 그치고 그 병을 에워싸고
있는 감정적, 정신적 문제를 돌보지 않는다면,
우리는 재차 병을 앓을 것이 분명해요.


- 루이스 헤이의 《긍정 수업》 중에서 -


* 병을 다시 얻는 이유는 많습니다.
가장 큰 요인은 병의 근원적 치료, 곧 병의 뿌리를
뽑지 못했기 때문입니다. 특히 눈에 보이지 않지만
감정적, 정신적, 정서적 치유를 제대로 해야
재발을 막을 수 있습니다. 진정한 치유,
전인적 치유는 육체적 물질적 차원에
국한해서는 안 됩니다.

반응형

'생활의 발견 > 아침편지' 카테고리의 다른 글

해우소(解憂所)  (0) 2024.07.04
아이는 어른의 거울이다  (0) 2024.07.03
기다리는 마음  (0) 2024.07.01
낌새. 느낌이 온다  (0) 2024.07.01
인도의 강압적 인구 억제 정책  (0) 2024.06.28
반응형

로프 묶는 법  rope knots for any occasion

 

https://www.youtube.com/watch?v=3X8drKsdf5E

 

https://youtu.be/d8Ar2O8SwLg?si=edzl_xgLRYDCNWm5

https://youtu.be/KXPmC171n9k?si=GnNklYyWDk27_pv5

 

반응형
반응형

 

[텃밭] 2024-06-29, 감자 수확, 열무 파종

 

씨감자를 심고 드디어 수확. 열무도 7월말 수확을 목표로.

 

반응형
반응형

별이에게
용기를 줄 방법은 무엇일까.
어려움을 안고 살아야 하는 사람들이
두려움 없이 새로운 일을 시도하게 도울
방법은 무엇일까. 명쾌한 답은 없을 것이다.
다만 망설이는 별이의 등을 떠밀기보다,
나아갈 방향을 가리키며 기다리는
마음을 갖기로 했다.


- 김지호의 《마음을 알아주는 마음》 중에서 -


* 어렵고 힘들 때
용기를 주는 사람이 있습니다.
지쳐 무너졌을 때 힘을 주는 사람이 있습니다.
다시 일어나 제 갈 길을 찾을 때까지 기다려주는
사람입니다. 세상 모든 사람에게는 자신만의 보폭이
있습니다. 그것이 타인의 눈에는 답답하거나, 지나치거나,
기준점에 부합하지 않는 듯이 보일 수도 있습니다.
그러나 그를 위한다면 가만히 지켜보며
기다려 줄 일입니다.

반응형

'생활의 발견 > 아침편지' 카테고리의 다른 글

아이는 어른의 거울이다  (0) 2024.07.03
병을 다시 얻는 이유  (0) 2024.07.02
낌새. 느낌이 온다  (0) 2024.07.01
인도의 강압적 인구 억제 정책  (0) 2024.06.28
흥행이 잘 되는 연극  (0) 2024.06.27
반응형

낌새

 

느낌이 온다

반응형

'생활의 발견 > 아침편지' 카테고리의 다른 글

병을 다시 얻는 이유  (0) 2024.07.02
기다리는 마음  (0) 2024.07.01
인도의 강압적 인구 억제 정책  (0) 2024.06.28
흥행이 잘 되는 연극  (0) 2024.06.27
신체 접촉, 장년층에 더 좋다  (0) 2024.06.26

+ Recent posts