Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- list 컬렉션
- Selection Sorting
- JSON
- datastructure
- 이것이 자바다
- R
- Graph
- Serialization
- 윤성우 열혈자료구조
- Stack
- s
- 알기쉬운 알고리즘
- 이스케이프 문자
- Algorithm
- 혼자 공부하는 C언어
- stream
- 메모리구조
- 윤성우의 열혈 자료구조
- C programming
- buffer
- C 언어 코딩 도장
- insertion sort
- coding test
Archives
- Today
- Total
Engineering Note
[Python] 리스트의 복사 본문
리스트를 일반 변수 처럼 복사하면 새로운 변수에 값을 전달하는 것이 아니라 같은 객체를 가리키는 두가지 변수가 생성되는 것이다. 그래서 복사한 곳의 리스트를 변경해도 기존 리스트도 변경되는 것이다. 사실은 두 변수가 같은 메모리를 가리키고 있기 때문이다.
list1 = [1,2,3]
list2 = list1
print("list1 id:",id(list1))
print("list2 id:",id(list2))
list1[0] = 10
print("list1",list1)
print("list1",list2)
출력 결과
메모리 이미지
리스트의 값이 리스트로 있을 때도 마찬가지도 이다.
q = [1,2,[3,4]]
root = [1010]
q[2] = root
q[2].append(3)
root.append(3333)
print(root) # 1010,3,3333
print(q[2]) # 1010,3 3333
print("q[2] id:", id(q[2]))
출력 결과
q[2]에 root 리스트를 복사하게 되면 q[2]는 root가 가리키는 객체의 주소가 저장된다. 그리고 q[2]의 값을 변경하더라도 root이 변경되고, root의 값을 변경하더라고 q[2]의 값도 변경된다.
그 이유는 q[2]와 root가 사실 같은 메모리 주소를 가리키고 있기 때문이다.
q = [1,2,[3,4]]
root = [1010]
q[2] = root.copy()
q[2].append(3)
root.append(3333)
print(q[2]) #1010,3
print(root) # 1010, 3333
print("q[2] id:", id(q[2]))
print("root id:", id(root))
리스트를 복사할 때 새로운 같은 메모리 주소를 가리키는 것이 아니라 새로운 메모리공간을 생성해 값만 복사하고 싶다면 .copy()함수를 사용하면 된다. 그러면 두 리스트는 전혀 다른 리스트가 된다.
출력결과
'Programming Language > Python' 카테고리의 다른 글
[Python] sqlalchemy, pymysql 비교 테스트 (0) | 2021.11.27 |
---|---|
[Python] 파이썬 함수호출 변수 저장 오류 (0) | 2021.11.18 |
[Python] startswith 함수 (0) | 2021.08.31 |
[Python] 파이썬 입력 (0) | 2021.07.21 |
[Python] 터미널 run 단축키 python (0) | 2021.06.26 |
Comments