출력을 할당하지 않으면 왜 파이썬 문자열 메소드를 호출해도 아무것도하지 않습니까?


136

간단한 문자열 교체를 시도하지만 왜 작동하지 않는지 모르겠습니다.

X = "hello world"
X.replace("hello", "goodbye")

단어 hello를 로 변경하고 싶으 goodbye므로 문자열 "hello world"을로 변경해야 합니다 "goodbye world". 그러나 X는 남아 있습니다 "hello world". 왜 내 코드가 작동하지 않습니까?

답변:


232

파이썬 에서는 문자열을 변경할 수 없기 때문 입니다.

이는 교체 된 사본X.replace("hello","goodbye")반환 한다는 의미입니다 . 이 때문에 다음 줄을 바꿔야합니다.X

X.replace("hello", "goodbye")

이 줄로 :

X = X.replace("hello", "goodbye")

더 넓게, 이 "자리에서"문자열의 내용을 변경하는 모든 파이썬 문자열 메쏘드 마찬가지입니다 , 예를 들어 replace, strip, translate, lower/ upper, join...

출력을 사용하고 버리지 않으 려면 출력을 무언가에 할당해야합니다 . 예 :

X  = X.strip(' \t')
X2 = X.translate(...)
Y  = X.lower()
Z  = X.upper()
A  = X.join(':')
B  = X.capitalize()
C  = X.casefold()

등등.


1
현학적 포인트 : 문자열에 대한 변이 할 수 있습니다 x += 'a'특별한 경우, 예를 들어 stackoverflow.com/a/40996908/6260170
Chris_Rands

@Chris_Rands : 당신이 옳은 것처럼 보이지만 외부에서는 실제 변경 가능성이 없습니다. 일부 구현에서는 이것이 실제로 사용되는지 확인하고 그렇지 않은 경우 (변경 가능성이 관찰되지 않으면) 실제로 변경됩니다. 그게 사실입니까?
Tadeck

@Tadeck 그럼 내가 생각하는 진짜 하지만 단지 CPython의 최적화 및 여기에 직접 관련이 아니다 (즉 내가 현학적되고 있다고 말했다 이유의)
Chris_Rands

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.