"""_summary_
얕은 복사(shallow copy)
list의 슬라이싱을 통한 새로운 값을 할당해봅니다.
아래의 결과와 같이 슬라이싱을 통해서 값을 할당하면 새로운 id가 부여되며, 서로 영향을 받지 않습니다
"""
print("\n","*" * 30, "\n 얕은 복사(shallow copy) \n","*" * 30)
a = [1, 2, 3]
b = a[:]
print(" a = ", a)
print(" b = ", b)
print(" id(a) : ", id(a)) #다른 주소
print(" id(b) : ", id(b))
print(" a == b : ", a == b)
print(" a is b : ", a is b)
b[0] = 5
print(a)
print(b)
"""
하지만, 이러한 슬라이싱 또한 얕은 복사에 해당합니다.
리스트안에 리스트 mutable객체 안에 mutable객체인 경우 문제가 됩니다.
id(a) 값과 id(b) 값은 다르게 되었지만, 그 내부의 객체 id(a[0])과 id(b[0])은 같은 주소를 바라보고 있습니다
"""
a = [[1,2],[3,4]]
b = a[:]
print(" id(a) : ", id(a)) #다른 주소
print(" id(b) : ", id(b))
print(" id(a[0]) : ",id(a[0])) #같은 주소
print(" id(b[0]) : ",id(b[0]))
"""깊은 복사(deep copy)
깊은 복사는 내부에 객체들까지 모두 새롭게 copy 되는 것입니다.
copy.deepcopy메소드가 해결해줍니다
"""
print("\n","*" * 30, "\n deepcopy \n","*" * 30)
import copy
a = [[1,2],[3,4]]
b = copy.deepcopy(a)
a[1].append(5)
print(" a : ", a)
print(" b : ", b)
print(" id(a) : ", id(a)) #다른 주소
print(" id(b) : ", id(b))
>>> 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])은 같은 주소를 바라보고 있습니다.
다른 사람들이 나를 어떻게 평가하는지, 다른 사람에게 내가 어떻게 보이는지에 예민해집니다. 어떤 때는 사람들로부터 잠시 숨어 고요함과 평온을 즐기고도 싶지만 이제 머리를 비우고 쉴 곳을 찾을 기회는 드물어졌습니다. 그래서 요새 학생들은 쉬는 시간이면 화장실에 가서 가만히 앉아 있다 온다는 이야기를 종종 합니다. 다른 사람들의 소란스러운 눈을 피해 조용하게 머무를 수 있는 유일한 장소가 화장실이라는 것입니다.
- 조영태 외의 《초저출산은 왜 생겼을까?》 중에서 -
* 산사의 화장실을 해우소(解憂所)라 합니다. '근심을 푸는 곳'이라는 뜻입니다. 누구의 방해도 받지 않고 오로지 홀로 쉴 수 있는 곳, 특별한 경우가 아니라면 온전히 허용 받을 수 있는 곳이 바로 화장실입니다. 요즘 아이들에게 화장실이 유일한 쉼터가 되고 있다는 사실이 안타깝습니다. 아이들의 해우소는 집과 학교여야 합니다.
우리나라는 미국처럼 인종이나 성적 지향 등에 따라 소수집단이 생기는 경우가 드문 것 같지만 사실은 그렇지 않다. 자신만의 관점에 따라 다른 사람을 차별하는 사람도 많다. 게다가 하나의 교실 안에 각 가정의 가치관이 모두 모인다. 수업 중에 아이들이 보이는 반응은 가정에서 부모가 보이는 반응이나 관점과 매우 유사하다는 사실을 교사들은 알고 있다.
- 송은주의 《다시 일어서는 교실》 중에서 -
* 아이가 하는 말을 들으면 그 집안 어른의 수준과 성향을 가늠할 수 있습니다. 아이가 말을 배우고 문장을 구사할 즈음 마치 리트머스 시험지처럼 주변 어른의 언행이 그대로 배어 나옵니다. 말투, 억양, 톤, 내용까지 너무 닮아 있습니다. 아이들은 어른의 거울이란 말이 수긍이 됩니다. 학교 교실이라는 공간 이전에 가정 공동체가 갖는 교육 효과는 참으로 지대합니다.
진실로 치유되려면 몸과 마음, 영혼까지 모두 포함되어야 합니다. 만일 질병을 '치료'하는 데 그치고 그 병을 에워싸고 있는 감정적, 정신적 문제를 돌보지 않는다면, 우리는 재차 병을 앓을 것이 분명해요.
- 루이스 헤이의 《긍정 수업》 중에서 -
* 병을 다시 얻는 이유는 많습니다. 가장 큰 요인은 병의 근원적 치료, 곧 병의 뿌리를 뽑지 못했기 때문입니다. 특히 눈에 보이지 않지만 감정적, 정신적, 정서적 치유를 제대로 해야 재발을 막을 수 있습니다. 진정한 치유, 전인적 치유는 육체적 물질적 차원에 국한해서는 안 됩니다.