2016-07-06 7 views
-2

다음 코드를 실행하면 값이 A가됩니다. 다시 실행하면 값이 B가됩니다. 이유가 무엇입니까? 같은 결과를 내서는 안됩니까?오브젝트 위치 - Python

코드

list_a = ['one_A', 'two_A', 'three_A'] 

#initialize the list 
new_li = map(lambda i: '{0}\n'.format(i), list_a) 

print(new_li) 

A 값

<map object at 0x00000000093E7E80> 

값 B

<map object at 0x0000000009423080> 

참고

지도 개체를 목록으로 만드는 방법을 묻지 않습니다. 그러나 맵 객체 new_li가 다시 생성 될 때 메모리 위치가 다른 이유는 무엇입니까?

+6

Pycon 왜 그들은 같은 것입니까? – melpomene

답변

2

파이썬에서는 변수에 값을 할당하면 값을 메모리 위치에 저장 한 다음 해당 개체에 대한 참조를 만듭니다. 따라서 변수는 참조 용 일뿐입니다. 따라서 변수에 새 값을 할당하면 해당 메모리 위치를 새 값으로 덮어 쓰지 않고 새 메모리 위치에 새 객체를 만들고 해당 메모리 위치에 대한 새 참조를 만듭니다.

예를 보려면 아래를 참조하십시오. 이 경우,리스트가 작성되면리스트 [1,2]는 메모리 위치 46777352에 저장됩니다. b가 생성되면 메모리 위치 46797512에 저장됩니다. 동일한 값을 가졌지 만 동일한 메모리 위치를 참조하지 않기 때문에 a는 b가 아닙니다. a가 [1,2,3] 값을 재 할당하면 메모리 위치 46777352의 값을 변경하지 않고 메모리 위치 46812296에 새 객체를 만듭니다. 변수 b는 원래의 메모리 위치를 유지하지만 변수 a 뒤에 작성됩니다.

예 또한 여기에

읽기는

Example

개념을 설명 pycon 2015 및 2016에서 좋은 동영상입니다.

현황 및 파이썬에 대한 신화 - Pycon 집중 2015

https://www.youtube.com/watch?v=_AEJHKGk9ns&feature=youtu.be

파이썬 - 2016

https://www.youtube.com/watch?v=9k5687mmnoc