인프런 커뮤니티 질문&답변

sarangyoun님의 프로필 이미지
sarangyoun

작성한 질문수

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

mutable object의 id 관련 질문입니다.

작성

·

149

0

안녕하세요

chapter04_02 강의 중 mutable/immutable 관련 부분에서 궁금한 것이 있어서

질문을 드립니다.

1. 아래 코드를 실행시키니 (1)=(2), (5)=(6)인데, (3)!=(4)가 됩니다.

list는 mutable하기 때문에 (1)=(2)가 되는 것은 이해가 되고, (5)=(6)인것도 이해가 되는데

왜 (3)과 (4)는 결과가 서로 다른지 잘 이해가 되지 않습니다. 

2. 4달전 lbm108 님의 질문에 대한 답변에서

"리스트안에 요소들이 연산에 의해서 값이 변경되서 재 할당 했으므로, ID값이 다르게 나타납니다."라고 되어 있는데,

설명이 잘 이해가 안되어서 다시 문의를 드립니다.(3)/(4)와 (5)/(6)은 결과가 동일해도 내부에서 연산하는 방법이 서로 다르다는 의미인가요?

#--

a = [1,2,3]

print(a, id(a))    # (1)

a.append(4)

print(a, id(a))    #(2)

#--

b = [1,2,3]

print(b, id(b))  # (3)

b = b*2

print(b, id(b))  # (4)

#--

c = [1,2,3]

print(c, id(c))   #  (5)

c *= 2

print(c, id(c))   #(6)

답변 2

1

좋은사람님의 프로필 이미지
좋은사람
지식공유자

연산에 관해서는 프로그램 고유의 자료구조를 통해서 계산이 되는 것이므로, 재 할당과는 관련은 없어요~

파이썬 데이터모델 에서 지정한 가변형, 불변형에 따라 새로운 공간으로 재 할당 되는 것입니다.

https://christoper31.postype.com/post/1891094

0

sarangyoun님의 프로필 이미지
sarangyoun
질문자

네.. 빨리 답변해 주셔서 감사를 드립니다. 

답변이 사실 잘 이해가 안되어 조금만 더 질문을 드리고 싶습니다.^^

제 질문은 b = [1,2,3]과 c=[1,2,3]은 둘 다 mutable한 list 형인데,

왜 (반복 연산자를 사용하는) b=b*2에 의해서는 (연산 전후의) b의 id가 달라지지만,

(할당 연산자를 사용하는) c*=2의 경우에는 (연산 전후의) c의 id가 달라지지 않는가 하는 것이었습니다.

반복 연산자가 할당 연사자의 내부 동작이 다르기 때문이라고 이해를 하면 되는 것인지 질문을 드리고 싶습니다.

sarangyoun님의 프로필 이미지
sarangyoun

작성한 질문수

질문하기