티스토리 뷰
10.6 리스트 복사하기 (Copying Lists)
- 리스트에 있는 데이터를 복사하여 다른 리스트에 넣기 위해서 하나씩 복사하여야 한다.
- 아래와 같이 할당문(=)으로 복사할 수 있을 거라 생각하겠지만
list2 = list1
- 위 문법은 list1을 list2에 복사하는 문법이 아니다. 이는 단지 list1의 주소값을 list2에다 복사하는 것일 뿐이다.
*list2 = list1
*리스트 주소값 예제
1
2
3
4
5
6
7
8
9
10 |
list1 = [1,2]
list2 = [3,4,5]
print("list1's ID = ",id(list1))
print("list2's ID = ",id(list2),"\n")
print("After the assignment statement:")
list2 = list1
print("list1's ID = ",id(list1))
print("list2's ID = ",id(list2)) |
cs |
<실행 결과>
*리스트 복사하기 예제
주소 복사
1
2
3
4
5 |
list1 = list(range(1, 10, 2))
list2 = list1
list1[0] = 111
print(list1)
print(list2) |
cs |
리스트 생성
1
2
3
4
5 |
list1 = list(range(1, 10, 2))
list2 = [] + list1
list1[0] = 111
print(list1)
print(list2) |
cs |
10.7 함수에 리스트 전달하기(Passing Lists to Functions)
- 리스트를 함수에 전달 할 때, 리스트의 내용물은 함수 호출 이후에 바뀔 수 있다. 즉 리스트는 가변적인 객체(mutable object)이다.
- 리스트는 객체(object)이기 때문에, 함수에 일반 객체를 전달하듯이 리스트를 함수에 전달하면 된다.
*사용 형식
def printList(lst):
for element in lst:
print(element)
- 위 함수를 아래와 같이 전달 가능하다.
printList([3,1,2,6,4,2])
*tip : 위 명령문은 리스트를 만들어 전달하지만 명시적인 주소 변수(reference value)가 없는 상태이다. 이를 익명 리스트(anonymous list)라고 부른다.
- 리스트는 가변 객체(mutable object)이기 때문에 함수 내부에서 내용물이 바뀔 수 있다.
*리스트 함수 호출 예제(PassListArgument.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
def main():
x = 1
y = [1,2,3]
m(x,y)
print("x is ",x)
print("y[0] is ",y[0])
def m(number,numbers):
number = 1001
numbers[0] = 5555
main() |
cs |
>>
- m(numuber, numbers)함수의 number은 불가변적, numbers는 가변적 객체이므로 x는 함수 밖에서는 1인 상태로 바뀌지 않는다.
- 그리고 디폴트 리스트(a list as a default argument)를 다룰 때 또 다른 문제점이 있다.
* 디폴트 리스트 함수 호출 예제(DefaultListArgument.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
def add(x, lst = []):
if x not in lst:
lst.append(x)
return lst
def main():
list1 = add(1)
print(list1)
list2 = add(2)
print(list2)
list3 = add(3,[11,12,13,14])
print(list3)
list4 = add(4)
print(list4)
main() |
cs |
<실행 결과>
- Lint 8 에서, 디폴트 값(default value) '[ ]'으로 함수의 인자(argument) lst가 생성되었다.
- 디폴트 값은 오직 한번만 생성되며, add(1)은 lst에 1을 추가한다.
- Line 11 에서 한번 더 함수가 호출 될 때 lst는 [ ]가 아닌 [1]이다.
- 그래서 호출 한 뒤에 lst는 [1,2]가 된다.
- Line 14 에서는 리스트 요소[11, 12, 13, 14]가 주어져있다. 그리고 이 리스트가 lst로 전달 된다.
- 만약 디폴트 리스트('[ ]')를 매 함수를 호출할 때 마다 사용하고 싶다면 아래와 같이 수정해야 한다.
*디폴트 리스트 예제(DefaultNoneListArgument.py)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
def add(x, lst = None):
if lst == None:
lst = []
if x not in lst:
lst.append(x)
return lst
def main():
list1 = add(1)
print(list1)
list2 = add(2)
print(list2)
list3 = add(3,[11,12,13,14])
print(list3)
list4 = add(4)
print(list4)
main() |
cs |
<실행 결과>
- Line 3는, add 함수가 호출될 때 마다 리스트 인자 없이 새로운 빈 리스트를 생성한다.
- 만약 리스트 인자가 주어 진다면, 함수가 호출 될 때 디폴트 리스트는 사용되지 않는다.
참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 이론' 카테고리의 다른 글
[파이썬]리스트 검색하기(순차 탐색, 이진 탐색) (2) | 2018.01.05 |
---|---|
[파이썬]함수에서 리스트 반환, 문자 빈도수 세기 (0) | 2018.01.03 |
[파이썬]리스트 기초(3) (0) | 2017.12.30 |
[파이썬]리스트 기초(2) (0) | 2017.11.25 |
[파이썬]리스트 기초(1) (0) | 2017.11.22 |
- Total
- Today
- Yesterday
- 파이썬 함수
- 파이썬 연산자
- 백준 10451
- 버츄어박스
- 자바
- 파이썬 진수 변환
- 파이썬 while
- 자바스크립트 자료구조
- 백준
- 자바스크립트 그래프
- css
- 파이썬 터틀
- 파이썬 클래스
- 자료구조
- css 그리드
- 파이썬 단계적 개선
- 백준 11501
- 파이썬 if문
- 명품 c++ 실습
- 파이썬 리스트
- 자바 에센셜 실습문제
- 파이썬 문자열
- 파이썬
- 파이썬 예제
- 파이썬 for
- 백준 1874
- 파이썬 선택문
- css 박스
- 파이썬 객체
- 웹
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |