在 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
。