Python

[Python] - 객체를 함수로 전달하는 방법

jyu_seo_ 2026. 1. 17. 16:14

객체 참조 복사

Python에서 함수에 값을 복사할 때 실제로 개체 자체의 복사본이 아니라 개체에 대한 참조를 복사한다. 이 개념을 "객체 참조 복사" 또는 "참조 값 복사" 라고 한다. 함수에서 값 복사 동작은 객체가 변경 가능한지 또는 변경 불가능한지에 따라 다르다.

 

1. 불변 객체(lmmutable Objects)

숫자, 문자열 및 튜플과 같은 불변 객체의 경우 함수 내 객체에 대한 모든 변경 사항은 새 객체를 생성한다. 원래 개체는 변경되지 않은 상태로 유지되므로 개체의 복사본이 함수에 복사된것처럼 보인다.

def modify_value(x):
	x = x + 1
    print(f"inside the function: {x}")

number = 5
modify_value(number)
print(f"Outside the function: {number}")

Output

Inside the function: 6
Outside the function: 5

 

이 예제에서 변수 number는 함수 내에서 수정되더라도 함수 외부에서는 변경되지 않은 상태로 유지된다.

 

2. 가변 객체(Mutable Object)

리스트, 딕셔너리 및 집합과 같은 변경 가능한 개체의 경우 참조가 동일한 개체를 가리키기 때문에 함수 내에서 개체에 대한 변경 사항이 함수 외부에도 반영된다.

def modify_list(lst):
	lst.append(4)
    print(f"Inside the function:{lst}")
    
my_list = [1,2,3]
modify_list(my_list)
print(f"Outside the function:{my_list}")

Output

Inside the function: [1,2,3,4]
Outside the function: [1,2,3,4]

 

이 예제에서 함수 내 리스트에 대한 변경 사항은 함수 외부에서도 볼수 있다.

 

변경 가능한 객체를 함수에 복사하기 전에 복사본을 만들고 싶다면 얕은 복사본에는 copy 모듈을, 깊은 복사본에는 할수 있다. 이렇게 하면 함수가 복사본을 수정할 때 원본 객체가 변경되지 않은 상태로 유지된다.


값 복사

"값 복사" 이라고도 하는 값 복사는 원래 개체 값의 복사본을 사용하여 새 개체를 만드는 프로세스 이다. 이 경우 원본 객체와 복사된 객체는 서로 독립적이다. 한 개체를 수정해도 다른 개체에는 영향을 미치지 않는다. 이는 두 객체가 별개의 메모리 위치를 가지고 있고 해당 값이 분리되어 있기 때문이다.

 

Python에서 정수,실수,문자열 및 튜플과 같은 불변 유형은 값 복사를 사용한다. 불변 객체의 값을 다른 변수에 할당하면 새 객체가 생성되고 원래 객체에서 값이 복사된다.

 

다음은 값 복사를 설명하는 예제다.

original_string = "hello"
copied_string = original_string

original_string = "world"

print(original_string) # Output: world
print(copied_string) # Output: hello

 

예제에서는 original_string 값을 copied_string에 할당했다. 나중에 original_string을 수정했을 때 copied_string에는 영향을 미치지 않았다. 두 변수가 독립적이고 별도의 메모리 위치에 값을 저장하기 때문이다.

 

값 복사는 함수에 인수로 복사하거나 복사본을 만들때 원래 개체가 변경되지 않은 상태로 유지되도록 한다. 그러나 값 복사는 큰 개체를 처리할 때 효율성이 떨어질수 있다. 동일한 값으로 새 개체를 만들면 상당한 양의 메모리와 처리 시간이 소비될 수 있기 때문이다. 이러한 경우 참조 복사가 더 효율적일수 있다.


레퍼런스 복사

"참조에 의한 복사"이라고도 하는 참조 복사는 개체 값의 별도 복사본을 만드는 대신 기존 개체에 대한 새 참조(또는 별칭)를 만드는 프로세스 이다. 이는 원본 참조와 복사된 참조가 모두 메모리의 동일한 개체를 가리키며 한 참조를 통해 개체에 대한 모든 변경 사항이 다른 참조에 반영됨을 의미한다.

 

Python에서 목록, 사전 및 집합과 같은 변경 가능한 유형은 참조 복사를 사용한다. 변경 가능한 개체를 다른 변수에 할당하면 새 개체가 생성되지 않는다. 대신 두 변수 모두 동일한 개체를 참조한다.

 

다음은 참조 복사를 설명하는 예제다.

original_list = [1,2,3]
copied_list = original_list

original_list[0] = 99

print(original_list) #Output:[99,2,3]
print(copied_list) #Output: [99,2,3]

 

예제에서는 original_list의 참조를 copied_list에 할당했다. 나중에 original_list를 수정 했을 때 copied_list에도 변경 사항이 반영되었다. 두 변수 모두 메모리에서 동일한 객체를 참조하기 때문이다.

 

참조 복사는 새 개체를 만들고 값을 복사할 필요가 없기 때문에 특히 큰 개체로 작업할 때 값 복사보다 더 효율적일수 있다. 그러나 하나의 참조를 통해 개체에 대한 변경사항이 동일한 개체에 대한 다른 모든 참조에 영향을 미치므로 의도하지 않은 부작용이 발생할 수도 있다. 이러한 부작용을 방지하기 위해 개체의 전체 복사본을 만들수 있다. 그러면 원래 개체 값의 복사본과 모든 중첩된 개체를 사용하여 새 개체가 생성된다.

'Python' 카테고리의 다른 글

[Python] - heap  (0) 2026.01.17
[Python] - 텍스트 파일 처리  (0) 2026.01.16
[Python] - 람다(Lambda)  (0) 2026.01.16
[Python] - Tuple  (0) 2026.01.16
[Python] - return value  (0) 2026.01.16