<질문>
- 파이썬 문자열을 불변으로 만드는 디자인 이유는 무엇입니까? 프로그래밍을 더 쉽게 만드는 방법은 무엇입니까?
- 나는 C에있는 것과 같은 변경 가능한 문자열에 익숙합니다. 변경 가능한 문자열없이 프로그래밍하려면 어떻게해야합니까? 모범 사례가 있습니까?
<답변1>
문자열을 받으면 그대로 유지됩니다. 당신이Foo
아래와 같이 문자열 인수를 사용하여 문자열을 수정합니다. 다음Foo
의 이름이 갑자기 변경됩니다.
class Foo(object):
def __init__(self, name):
self.name = name
name = "Hello"
foo = Foo(name)
name[0] = "J"
변경 가능한 문자열을 사용하면 나쁜 일이 발생하지 않도록 항상 복사본을 만들어야합니다.
또한 단일 문자가 길이가 1 인 문자열과 다르지 않은 편리함을 제공하므로 모든 문자열 연산자가 문자에도 적용됩니다.
마지막으로 문자열이 변경 불가능하지 않은 경우 문자열을 키로 안정적으로 사용할 수 없습니다.dict
, 해시 값이 갑자기 변경 될 수 있기 때문입니다.
변경 불가능한 문자열로 프로그래밍하는 경우 숫자를 처리하는 것과 동일한 방식으로 처리하는 데 익숙해집니다.가치, 객체가 아닙니다. 첫 글자 변경name
될 것이다
name = "J" + name[1:]
<답변2>
불변 문자열은 C 문자열과 비교할 때 메모리 할당을 크게 단순화합니다. 길이를 추측하지 않고 과도하게 할당되기를 바라며 과도하게 할당합니다.
더 안전합니다.못C에서 할 수있는 방식으로 버퍼 오버런이 발생합니다.
변경 가능한 문자열 사용 사례는 하나뿐입니다.
- 부분 문자열 또는 단일 문자 교체
모두다른 문자열 사용 사례 (연결, 검색 등)는 변경이 중요하지 않습니다. 다른 모든 경우에는 변경 가능성이 중요하지 않습니다.
Python에서 문자 또는 하위 문자열을 바꾸려면 새 문자열을 만들기 만하면됩니다.
x = x[:place] + replacement + x[place+1:]
그것은 참신하거나 독특한 유일한 코드입니다.
이해하지 못하는 이유로 다음을 추가하는 것이 중요해 보입니다.
"불변 문자열보다 문자열 버퍼 오버플로를 방지하는 다른 방법이 있습니다."
이 질문의 목적을 위해 (특히 Python에 대한) 불변 문자열은 버퍼 오버플로가 없다는 즐거운 결과를 가져옵니다. 다른 언어의 경우 다른 원칙, 규칙 및 뉘앙스가 적용됩니다.
<답변3>
- 변경 불가능한 객체는 자동으로 스레드로부터 안전합니다.
- C의 문자열과 관련된 극심한 고통에 비해 Python 문자열을 사용하는 것이 사소한 일임을 알 수 있습니다.
<답변4>
변경 불가능한 문자열은 문자열을 복사 할 필요없이 사전 및 유사한 데이터 구조의 키가 될 수 있습니다. 다른 방법보다 변경 불가능한 문자열 주위에 변경 가능한 래퍼를 만드는 것이 더 쉽습니다.
<답변5>
대부분의 언어에는 변경 불가능한 문자열이 있습니다. 여기에는 Java, Python 및 C #이 포함됩니다. 일반적으로 문자열을 연결할 때 언어는 완전히 새로운 문자열을 할당하고 두 문자열의 내용을 새 문자열로 복사합니다.
불변성은 프로그래밍을 더 쉽게 만드는 경향이 있습니다. 특히 다중 스레드 환경을 다룰 때.
<답변6>
변경 불가능한 문자열은 프로그래밍을 훨씬 쉽게하므로 C #과 Java도이를 사용합니다.
문자열을 변경할 수 있었다면 악의적 인 호출자가 문자열을 변경할 수 있으므로 외부에서 제공 한 문자열을 신뢰할 수 없습니다.
또한 멀티 스레딩을 훨씬 더 어렵게 만듭니다.
'개발 > Python' 카테고리의 다른 글
[파이썬] 데코레이터를 사용하여 변수를 범위에 삽입하는 방법은 무엇입니까? (0) | 2021.04.21 |
---|---|
Python3의 BaseHTTPServer 또는 http.server (0) | 2021.04.21 |
Python에서 소수점 세 자리로 자르기 (0) | 2021.04.20 |
Python 함수 포인터 (0) | 2021.04.20 |