list1=[1,2,3,4,5]
# list2는 list1이 가리키는 list와 동일한 주소
list2=list1
# 아래 두 줄은 동일한 id를 출력함
print("list1 id :", id(list1))
print("list2 id :", id(list2))
#################################
# list2는 list1을 바탕으로 slicing을 통해 복사된
# list1과 똑같이 생겼지만, 또다른 list인 녀석을
# 가리킨다.
list2=list1[:]
# 아래 두 줄은 다른 id를 출력함
# 지금의 list1과 위에서의 list1은? - 동일
print("list1 id :", id(list1))
print("list2 id :", id(list2))
# 마찬가지로
list3=list1[0:len(list1)]
list4=list1.copy()
print("list3 id :", id(list3))
print("list4 id :", id(list4))
print("1의 주소 in list1 :",id(list1[0]))
print("1의 주소 in list4 :", id(list4[0]))
변수명 = 리스트를 가리키는 변수
( 예를 들어
list1=[1,2,3,4,5]
list2=list1
)
에서 list2는 list1을 바탕으로한 새로운 리스트를 가리키게 되는 것이 아닌, list1이 참조하는 [1,2,3,4,5] 라는 리스트(주소값이 1000 번지라고 하자)를 가리키게 된다.
즉 list1과 list2 모두 주소값 100번지를 가리키는 것이다.
Q. 그렇다면, [1,2,3,4,5]의 형태로 생긴 리스트는 1000번지에 하나만 존재해야하는가?
* 아니다.
list1[:] 이나 list1.copy() 를 통해 list1과 동일하게 생긴 새로운 리스트를 다른 주소에 또 다시 만들 수 있다.
Q. list1[0]과 list4[0]은 모두 1을 가리키는데 이 아이들은 같은 1일까 다른 1일까?
즉 같은 주소값에 존재하는 하나의 1이라는 숫자일까, 다른 주소값에 존재하는 1이지만, 다른 1일까??
* 같은 1이다.
Q. 같은 list1[0]의 값을 5으로 바꾸면 list4[0]의 값도 5으로 바뀔까?
* 아니다.
list1[0] 과 list4[0]이 모두 주소값 100번지에 있는 1이라는 숫자를 가리키고 있다고 치자 ( 사실 python에서는 숫자도 다 객체임 )
여기서 list1[0]의 값을 5으로 변경하게되면 주소값 100번지의 숫자가 1에서 5으로 변경되는 것이 아니라,
각 int형 객체들의 주소는 그대로이고 list1[0]이 가리키는 주소 자체가 바뀌는 것이다.
즉 list1[0]은 5이라는 숫자의 주소값을 가리키게 되는 것이고 list4[0]은 여전히 주소값 100번지에 있는 1을 가리킨다.
'Python > Python Basics' 카테고리의 다른 글
파이썬 웹 크롤링 마스터하기-1 requests 모듈, HTTP Request란? (0) | 2019.04.09 |
---|---|
파이썬 웹 크롤링 마스터하기 계획 (0) | 2019.04.09 |