Python/공부

파이썬 mutable immutable 얕은 복사 깊은 복사 copy()

끈끈 2023. 3. 31. 21:35

 

! ! 코딩할 때는 휴먼 에러가 생기지 않을 방향으로 작성해야 한다 ! !

 

! ! 파트 분배시 input과 output을 미리 정해두면 좋다 ! !

 

! ! 주석을 잘 활용하자 ! !

 


 

mutable한 객체 :

객체 생성 이후에도 내부 상태가 변경될 수 있는 객체로, 리스트(list), 딕셔너리(dict), 집합(set) 등이 포함된다.

 

immutable(불변)한 객체 :

객체 생성 후 내부 상태가 변경될 수 없는 객체로, 문자열(str), 숫자(int, float 등), 튜플(tuple) 등이 포함된다.

 

a = "hello world"
b = ["hello", "world"]

a_ = a
b_ = b

a_ += "!!"
b_.append("!!")

print(a) # hello world
print(b) # ['hello', 'world', '!!']

 


 

https://sw-ing.tistory.com/46

 

파이썬 뒤집기 슬라이싱 reverse() join() pop()

배열 뒤집기 파이썬의 내장 함수인 reverse() 사용하기 num_list = [1, 2, 3, 4, 5] num_list.reverse() print(num_list) # [5, 4, 3, 2, 1] 자료형 슬라이싱 사용하기 기본 구조는 [start(기본값=0):end(기본값=시퀀스의 길이

sw-ing.tistory.com

 

리스트의 복사본 만들기

 

for monster in monsters[::]:
    if monster.current_hp <= 0:
        monsters.remove(monster)

 

monsters 리스트를 돌며 쓰러트린 몬스터는 삭제.

 

근데 여기서 리스트가 변경되어 버리기 때문에 복사본을 돌게 해주는 것!

 


 

얕은 복사(shallow copy)

 

원본 객체의 내부 객체들을 참조하는 복사본을 만드는 것.

 

원본 객체들 중 일부가 변경될 경우, 복사본에도 영향을 미친다.

 

copy 모듈의 copy() 함수나 슬라이싱 연산자([:])를 사용하여 수행할 수 있다.

 

깊은 복사(deep copy)

 

원본 객체와 별개의 객체를 생성하는 복사 방법.

 

원본과 복사본의 객체는 모두 독립적이고 변경 내용이 영향을 미치지 않는다.

 

copy 모듈의 deepcopy() 함수를 사용하여 수행할 수 있다.

 

import copy

a = [[1, 2], [3, 4]]

# 얕은 복사
b = copy.copy(a)

# 깊은 복사
c = copy.deepcopy(a)