가명 혹은 가짜이름표라 불리는 alias는 메모리 참조 문제때문에 일어난다.
x= 5
y = x
y = 3
print(x) #5
print(y) #3
위의 코드와 같이 y에 x를 할당하고, y의 값을 변경해도, x의 값이 변하지 않는다.
-> call by value
x= [2,3,5,7,11]
y = x
y[2] = 4
print(x) #[2,3,4,7,11]
print(y) #[2,3,4,7,11]
-> call by address

첫 번째 코드에서, y = x 를 하면, 숫자형 데이터 5에 y란 꼬리표가 붙는다.

그런데!! y = 3 을 해줌으로써, 3이란 데이터에 y란 이름표가 새로이 달리게 된다.
즉 x의 근본적인 데이터를 건들지 않는 것이다.

하지만,,, 리스트의 경우 참조형 객체이기 때문에 객체의 주소를 y에 할당한다.

따라서, y[2] = 4로 초기화 해 버린다면, x가 바라보고있는 주소의 리스트 또한 변경되게 된다.
이런 문제를 방지하려면 어떻게 해야할까?
앞서 알아본 list()함수를 이용해야한다!
x= [2,3,5,7,11]
y = list(x)
y[2] = 4
list함수는 새로운 리스트를 리턴해주기 때문에 이 상태에선 x와 y가 서로 다른 리스트의 주소를 바라본다.

따라서 이 경우에 우리가 y[2] = 4 로 변경을 하더라도

x가 바라보는 리스트의 데이터는 변하지 않는다!
앞서 말했듯이 리스트는 문자열과 비슷한 구조를 가진다.
문자열은 문자를 나열, 리스트는 데이터를 나열한다.
string_ = "hello"
string_[0] #h
string_[1] #e
...
string_[0:5] # hello
list1 = [0,1,2]
list2 = [3,4,5]
list_ = list1 + list2
print(list_) # [0,1,2,3,4,5]
list_ = [1,2,3]
print(len(list_)) # 3
string_ = "hello"
print(len(string_)) # 5
하지만, 서로 다른 자료형인 이유가 존재한다.
리스트는 데이터를 변경할 수 있지만, 문자열은 데이터를 변경할 수 없다.
리스트와 같이 수정 가능한 자료형을 'mutable'한 자료형이라고 부르고, 문자열과 같이 수정 불가능한 자료형을 'immutable'한 자료형이라고 부른다.
숫자, 불린, 문자열은 모두 immutable한 자료형입니다.
number = [0,1,2]
number[0] = 5
#[5,1,2]
name = 'hwany'
name[0] = 'c'
print(name) ## error 발생!
Traceback (most recent call last):
File "untitled.py", line 3, in <module>
name[0] = "C"
TypeError: 'str' object does not support item assignment
name = 'hwany' + ' hello'
#이거는 가능! -> 문자열을 합쳐서 새로운 문자열을 만든 것이기 때문
# case1
print(id(numbers[1:2]))
print(id(numbers[2:3]))
print(id(numbers[0:1]))
# case2
a = numbers[1:2]
b = numbers[2:3]
c = numbers[0:1]
print(id(a))
print(id(b))
print(id(c))
# 위 코드를 실행할 때 마다...
140553129491712
140553129521856
140553129521856
140553129521856
140553129521792
140553129521984
139732436974784
139732437004928
139732437004928
139732437004928
139732437004864
139732437005056
139755037748416
139755037778560
139755037778560
139755037778560
139755037778496
139755037778688
이렇게 값이 바뀜!
메모리 주소를 사용 하고나서 메모리주소를 반납하기때문에. 이를 garbage collector가 자동으로 수행해준다.
2021-09-12