Interfaces

Python Objects


변수 이름(name)은 객체(object)를 가리키고, 대입은 참조(reference)가 가리키는 대상을 정한다. 코드 한 줄마다 변수 이름, 객체, 관찰값을 함께 따라가 객체 변경과 변수 재대입을 구분한다.

별칭둘 이상의 변수 이름이 같은 객체를 가리키는 상태다.
객체 변경메서드 호출이나 속성 대입이 기존 객체의 상태를 바꾼다.
재대입대입이 변수 이름을 다른 객체에 연결한다.
is와 ==is는 같은 객체인지, ==는 리스트처럼 값을 비교하는 객체에서 값이 같은지 확인한다.

코드 한 줄이 이름과 객체 중 무엇을 바꾸는지 따라간다

프로그램을 고르고 한 줄씩 실행한다. 초록 테두리 객체는 방금 줄에서 상태가 바뀌거나 새로 만들어진 객체다.

실행 코드

변수 이름과 참조

객체

관찰값

실행 코드에서 초록 막대가 붙은 줄이 방금 실행한 줄이고, 흐린 줄은 아직 실행하지 않은 줄이다. 이름 칸의 화살표는 그 이름이 가리키는 객체이고, 색이 채워진 객체 칸은 이번 줄에서 상태가 바뀐 객체다.

같은 시작에서 세 번째 줄이 결과를 가른다

세 코드 모두 a = [1, 2]에서 시작한다.

객체 변경 · b = a, b.append(3)

a → A [1, 2, 3]
b → A [1, 2, 3]

같은 객체가 바뀌어 두 이름 모두에서 변화가 보인다.

재대입 · b = a, b = [7, 8]

a → A [1, 2]
b → B [7, 8]

b의 참조만 새 객체로 바뀌고 A는 그대로다.

새 리스트 · b = list(a), b.append(3)

a → A [1, 2]
b → B [1, 2, 3]

list(a)가 새 객체를 만들었으므로 b의 변경이 a에 보이지 않는다.

메서드 호출은 객체를 바꿀 수 있고 대입문은 변수 이름이 가리키는 객체를 정한다.