inflearn logo
강의

Course

Instructor

Python from Basics to Advanced Taught by Silicon Valley Engineers

Understanding the differences between Assignment vs. Shallow Copy vs. Deep Copy

shallow copy 질문 있습니다.

246

kokp

13 asked

1

a=[1,2,3,4,5] 
b=a[:] 
b.append(6) 
print(id(a[0]),id(b[0])) 
a[0]=-1 
print(id(a[0]),id(b[0]))

위 코드에서 강사님께서 말씀하신대로 b=a[:] 했을때 각 a와 b의 elment들이 같은 id인것을 확인 했습니다.

그런데 a[0]=-1을 했을때 새로운 주소에 할당이 되는것 같은데요 이유가 뭔지 궁금합니다.

그리고 혹시 id로 접근해서 값을 변경하는것도 가능한가요?

python 알고리즘

Answer 3

1

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

kokp님의 질문과 관련하여, 제공된 지식공유자의 답변 중에 b=a[:]를 사용한 상황에 대해 설명하는 부분이 있어 이와 관련된 자료를 찾아보았습니다.

강의 “실리콘밸리 엔지니어가 가르치는 파이썬 기초부터 고급까지“에서 언급된 내용에 따르면, b=a[:]는 리스트 a의 얕은 복사를 의미하는데, 이 경우 ab는 서로 다른 객체가 됩니다. 즉, ab는 같은 값을 가지고 있지만, 서로 다른 메모리 주소를 가리킵니다. 따라서, 한 리스트에 대한 변경이 다른 리스트에 영향을 주지 않습니다. 이는 얕은 복사의 특성 중 하나로, 얕은 복사된 리스트는 원본 리스트의 각 요소들을 새 리스트에 복사하지만, 복사된 요소들은 원본 요소들과 같은 객체(즉, 같은 메모리 주소를 가리키는)를 참조합니다.

질문에서 언급한 a[0]=-1의 경우, a[0]에 새로운 값 -1을 할당하면서 a[0]은 새로운 객체 -1을 참조하게 됩니다. 이는 Python에서 정수와 같은 불변 객체(immutable object)는 값이 변경될 때 새로운 객체를 생성하고 해당 메모리 주소를 참조하게 되기 때문입니다. 따라서 a[0]의 메모리 주소가 변경된 것입니다. 이와는 달리, b 리스트는 a 리스트의 얕은 복사본이기 때문에, a의 요소에 대한 변경이 b에는 반영되지 않습니다.

또한, Python에서는 직접적으로 메모리 주소를 사용하여 값을 변경하는 것은 기본적으로 제공되지 않습니다. Python은 높은 수준의 언어로, 메모리 관리를 추상화하고 있으멀로 사용자가 직접 메모리 주소에 접근하여 값을 변경하는 것은 일반적인 사용 사례에서 지원하지 않습니다.

질문에서의 상황을 이해하는 데 도움이 되었기를 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

kokp

감사합니다~

0

altoformula

흐음... 인프런AI 인턴이 열일하는군요 ㅎㅎㅎ

제가 할말을 다 해버렸네요. 혹시 더 궁금하신 거 있으시면 질문 올리시면 됩니다.

[업데이트] 파이썬 패키지 부분에서 안되어서 강의 진행 불가

2

51

3

html 읽기 오류

1

83

2

DataFrame groupby 사용관련 질문

1

88

2

pylint shell 사용법

0

67

2

자막오류 수정가능한가요?

0

74

1

복합 조건절 관련 궁금증

0

77

2

49.행맨 프로그램 - 재시도 횟수 관련.

1

73

1

64. 파이썬 입문자가 쉽게 빠지기 쉬운 몇가지 에러(혹은 로직)에 대해 알아보기

0

101

2

Replit UI가 업데이트 되서 강의 진행이 멈췄어요

2

175

3

Replit을 사용해보려고 하는데 영상처럼 진행이 안되네요

3

390

2

실무에서의 제네레이터 함수 사용에 관한 질문입니다.

0

62

2

영상이 소리만 나오고 영상은 안보입니다.

0

84

2

pandas 오류 질문

0

121

2

상속 질문

1

132

2

total을 float으로 바꾸신 이유

0

198

2

섹션2 ["환경 vs. 설정 vs. 구성"] 강의 자막 문의

0

140

1

파이썬 data insert to table

0

219

2

파이썬 Class Method 질문

0

152

2

timeit 쓸 때는 만들었던 함수를 재사용 할 수는 없는지?

0

130

2

__repr__ 와 __str__ 차이점?

0

200

2

class method vs static method

0

266

2

Type hint 문법의 Type Checking이 강제성이 있는지?

0

158

2

클래스 접근자 강의 복습부분 0:47에 오타가 있네요

0

101

2

수업 때 쓰셨던 txt file 공유 해주시면 좋겠습니다

1

173

1