1

반환 대 다른 개체를 원래 수정의 방향을 프로그래밍 객체, 그리고 아주 기본적인 (101) 질문이 있습니다파이썬 방법 : 나는 파이썬에 새로 온 사람

나는 몇 가지 방법이 수정 된 개체를 반환 참조하고, 원본을 보존 : 나는 다른 방법을 수정하고 원래 개체를 덮어 참조

In: x="hello" 
In: x.upper() 
Out: 'HELLO' 
In: x 
Out: 'hello' 

:

In: y=[1,2,3] 
In: y.pop(0) 
Out: 1 
In: y 
Out: [2, 3] 

는이 중 하나는 규범 있습니까? 주어진 클래스와 메소드를 다루는 경우를 알 수있는 방법이 있습니까?

+2

변경 가능한 개체의 메서드는 원본 개체를 "덮어 쓰지"않고 원본 개체를 변경합니다. 변경 가능 객체와 변경 불가능 객체는 모두 Python의 핵심 요소입니다. 파이썬에 대한 기본적인 소개는 차이점을 설명해야합니다. 스택 오버플로는 다른 곳에서 즉시 사용할 수있는 정보를 재생하도록 설계되지 않았습니다. –

+1

특정 클래스/메소드로 사례가 무엇인지 파악하려면 문서를 살펴 보는 것이 좋은 방법입니다. 그들은 다른 상황에서 사용됩니다. – qxz

+1

[Immutable vs Mutable types] (http://stackoverflow.com/questions/8056130/immutable-vs-mutable-types)와 공식 파이썬 문서에 대한 링크를 참고하십시오. –

답변

3

이 예에서는 변경 불가능한 내장 객체 (예 : 문자열 및 튜플)와 변경 가능한 객체 (예 : 목록, 사전 및 세트)의 차이점을 보여줍니다.

일반적으로 클래스 (개체)가 불변으로 설명되면 이전 동작을 예상하고 후자는 변경 가능한 개체를 기대해야합니다.

2

list.pop()은 약간 특별한 경우이지만 두 가지 모두 파이썬에서 관용적입니다.

일반적으로 의 메소드또는 값을 반환합니다. list.pop()은 정의 상으로는 목록에서 항목을 제거한 다음 반환해야한다는 점에서 약간 특이합니다.

shape.stretch(x=2).move(3, 5) 

: 방법은과 같이 서로 연결 될 수 있도록 것 - 그것은 다른 언어이지만, 파이썬에서 일반적이지 무엇

는 개체를 돌연변이 그 같은 객체를 반환하는 것입니다. ..하지만 프로그램을 디버그하기가 더 어려워 질 수 있습니다.

문자열과 같이 개체가 변경 불가능한 경우 메서드에서 변경되지 않도록 할 수 있습니다 (정의 상 정의 할 수 없기 때문에). 그렇게하지 못하면 메소드가 객체를 변형시키는지를 알려주는 유일한 방법은 문서 (보통 파이썬의 내장 및 표준 라이브러리 객체에 매우 적합) 또는 물론 소스를 읽는 것입니다.

관련 문제