Cでは、char *
「文字へのポインタ」タイプです。ポインタは、値自体へのアクセスを提供する「ハンドル」のようなものです。を割り当てるときword = "Now";
は、文字列の文字ではなく、ハンドルを変更します。両方とも"Hello"
、"Now"
一定のストレージにバイトのグループとして存在します。
Pythonは、実行していることの多くを隠しますが、内部的には、組み込みの文字列参照は基本的にポインターのように機能します。したがって、あなたの観察はある程度まで正しいです。
これらの言語の文字列の大きな違いは、Pythonではすべての文字列が不変であるということです。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".
Pythonでは、完全に新しい文字列を作成する必要があります。
word = 'h' + word[1:]
ここで、新しい文字列を構成するバイトは、のバイトとは異なりword
ます。
Pythonには「参照セマンティクス」があるのは正しいです。すべてが、値ではなくハンドルを操作しているように動作します。
>>> a=[1]
>>> b=a
>>> a
[1]
>>> b
[1]
>>> a[0]=5
>>> a
[5]
>>> b
[5]
ここで、割り当てb = a
はリストへのハンドルまたは参照をコピーしました。リスト自体はコピーされません。a
の最初の要素を変更すると、も変更されるため、これは明らかですb
。