=
을 참조하십시오. [:]
을 사용하면 복사본을 만들 수 있습니다. 불변 인 문자열의 경우 이것은 중요하지 않지만 목록 등의 경우에는 중요합니다.
>>> s = 'hello'
>>> t1 = s
>>> t2 = s[:]
>>> print s, t1, t2
hello hello hello
>>> s = 'good bye'
>>> print s, t1, t2
good bye hello hello
하지만 : 문자열을 처리 할 때
는
>>> li1 = [1,2]
>>> li = [1,2]
>>> li1 = li
>>> li2 = li[:]
>>> print li, li1, li2
[1, 2] [1, 2] [1, 2]
>>> li[0] = 0
>>> print li, li1, li2
[0, 2] [0, 2] [1, 2]
은 왜 그것을 사용? 내장 문자열은 변경할 수 없지만 문자열을 요구하는 라이브러리 함수를 작성할 때마다 사용자는 "문자열처럼 보이고"문자열처럼 작동하지만 사용자 정의 유형 인 것을 제공 할 수 있습니다. 이 유형은 변경 될 수 있으므로이를 처리하는 것이 좋습니다.
class MutableString(object):
def __init__(self, s):
self._characters = [c for c in s]
def __str__(self):
return "".join(self._characters)
def __repr__(self):
return "MutableString(\"%s\")" % str(self)
def __getattr__(self, name):
return str(self).__getattribute__(name)
def __len__(self):
return len(self._characters)
def __getitem__(self, index):
return self._characters[index]
def __setitem__(self, index, value):
self._characters[index] = value
def __getslice__(self, start, end=-1, stride=1):
return str(self)[start:end:stride]
if __name__ == "__main__":
m = MutableString("Hello")
print m
print len(m)
print m.find("o")
print m.find("x")
print m.replace("e", "a") #translate to german ;-)
print m
print m[3]
m[1] = "a"
print m
print m[:]
copy1 = m
copy2 = m[:]
print m, copy1, copy2
m[1] = "X"
print m, copy1, copy2
면책 조항 :
이러한 유형은 다음과 같을 수 있습니다이 작동 할 수 및 [:]
의 사용 동기를 부여하는 방법을 보여 그냥 샘플입니다. 테스트되지 않았고, 불완전하며, 끔찍한 성능을 보입니다.
나는이 문장에 동의하지 않을 것이다. 이것은 문자열을 복사하는 파이썬 방법이 아니다. 당신은'='을 사용하는 것이 맞습니다. 목록은 다른 이야기입니다. – wim