파이썬 데이터의 비밀
Aliasing
- 파이썬 자료형의 따라 aliasing이 일어난다.불변형 (immutable) : tuple, str, int, bool, float
- 가변형 (mutable) : dict, list
- 변수 이름이 적힌 이름표를 값에 단다고 생각할 수 있다.
x = 5 # 5에 x라는 이름표를 단다.
y = x # x = 5 이므로 5에 y 이름표를 단다.
y = 3 # 한 이름표는 한 곳에만 달릴 수 있다. 5에 있던 y 이름표가 없어지고 3에 y 이름표가 달린다.
print(x) # 5
print(y) # 3
- 리스트의 경우 가변형이기 때문에 값이 다 바뀐다.
x = [2, 3, 5, 7, 11]
y = x # 가명 (alias) # [2, 3, 5, 7, 11]에 y 이름표를 단다.
y[2] = 4 # y = [2, 3, 4, 7, 11] 이때 리스트에 x 이름표도 달려 있으므로 x도 바뀐다.
print(x) # [2, 3, 4, 7, 11]
print(y) # [2, 3, 4, 7, 11]
x = [2, 3, 5, 7, 11]
y = x
y = [2, 3] # 슬라이싱은 새로운 리스트로 이름표 할당
print(x) # [2, 3, 5, 7, 11] # x는 바뀌지 않는다.
print(y) # [2 ,3]
x = [2, 3, 5, 7, 11]
y = list(x)
y[2] = 4
print(x)
print(y)
- list(x)를 이용하면 기존의 값을 안바꾸고 복사할 수 있다.
x = [2, 3, 5, 7, 11]
y = list(x) # x 의 값을 복사하여 y에 저장
y[2] = 4 # y 리스트의 값 바꾸기
print(x) # [2, 3, 5, 7, 11]
print(y) # [2, 3, 4, 7, 11]
리스트와 문자열
- 리스트와 문자열은 비슷한 부분이 많다.len 함수를 사용해 문자의 갯수를 알 수 있다.그러나 문자열은 리스트와 달리 수정할 수 없다.
- 덧셈 연산이 가능하다. ( 'ab' + 'cd' = "abcd' )
- 인덱싱을 통해 특정 문자열을 뽑거나, 슬라이싱할 수 있다.
alphabet_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
print(alphabet_list[0]) # a
print(alphabet_list[:3]) # ['a', 'b', 'c']
print(len(alphabet_list)) # 9
alphabet_string = 'abcdefghi'
print(alphabet_string[0]) # a # 문자열도 인덱싱을 사용할 수 있다.
print(alphabet_string[:3]) # abc
print(len(alphabet_string)) # 9 # len 함수를 통해 문자열의 갯수를 알 수 있다.
alphabet_string[0] = q #error # 문자열은 리스트와 달리 수정이 불가능하다.
- 인덱싱이 가능하기 때문에 for 반복문도 사용할 수 있다.
alphabet_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
for i in alphabet_list:
print(i)
alphabet_string = 'abcdefghi'
for k in alphabet_string:
print(k)