C에서 char *
은 "문자를 가리키는 포인터"유형입니다. 포인터는 값 자체에 대한 액세스를 제공하는 "핸들"과 같습니다. word = "Now";
을 할당하면 문자열의 문자가 아니라 핸들이 변경됩니다. "Hello"
및 "Now"
은 모두 상수 저장소에 바이트 그룹으로 존재합니다.
파이썬은 그 기능을 숨기고 있지만 내부적으로 내장 된 문자열 참조는 본질적으로 포인터처럼 작동합니다. 따라서 여러분의 관찰은 정확한 것입니다.
이 언어의 문자열의 큰 차이점은 파이썬에서 모든 문자열이 변경되지 않는다는 것입니다. C를 사용하면 (상수가 아닌) 문자열 내의 문자를 (할당에 의해) 조작 할 수 있습니다. 예를 들어 :
char word [] = "Hello";
// word is now the name of a 6-character (including final null) mutable string
word[0] = 'h';
// Now word has the value "hello".
파이썬에서, 당신은 완전히 새로운 캐릭터를 만들어야 할 것입니다 :
word = 'h' + word[1:]
을 여기에 새로운 문자열을 구성하는 바이트 word
보다 다릅니다.
당신은 파이썬이 "참조 의미론"을 가지고 있다는 것은 당연합니다. 모든 것은 값이 아닌 핸들을 조작하는 것처럼 동작합니다.
>>> a=[1]
>>> b=a
>>> a
[1]
>>> b
[1]
>>> a[0]=5
>>> a
[5]
>>> b
[5]
여기서 할당 b = a
은 핸들 또는 참조를 목록에 복사했습니다. 목록 자체는 복사되지 않습니다. 이것은 a
의 첫 번째 요소를 변경하면 b
이 변경 되었기 때문에 분명합니다.
a 및 b의 출력에 변경 사항이 표시되지 않습니다. 둘 다 [1]을 인쇄합니다. 변화가 의미하는 바를 명확히 할 수 있습니까? – joebalt
@Joe Baltimore : 예제를 수정했습니다. Gene은 오타가 있다고 생각합니다. 그것은 훌륭한 예입니다. +1 – dawg
@JoeBaltimore 죄송합니다. 수정했습니다. 오류가 발생했습니다. 고쳐 주셔서 감사합니다. – Gene