python 速成指南

时间:2025-03-30 07:48:36

如:

char c = 'A'; char *p = &c;

我们手上只有一个 p,要怎么修改 *p 的内容呢?毫无疑问,我们没有办法。而这就正是

python 里的现实情况。char 就是属于 immutable 的类型,我们再举一个 C++ 的例子:

class foo {

char m_c; public:

foo () : m_c('A') {} void set (char c) { m_c = c;

}

char get () {

return m_c;

}

};

foo *p = new foo();

std::cout << "foo: " << p->get() << std::endl; p->set('B');

std::cout << "foo: " << p->get() << std::endl;

在上面这个例子里,如果说我们仍然没有对指针的 * 运算,但我们依然可以改变 *p 的内容,这是因为 p 所指向的对象,具有修改自身的能力(提供了相关的方法)。这种类型, 在 python 里面,就是 mutable 的。我们常见的 list,dict 等等,就属于此类。而 python 的字符串类,则属于 immutable 的。

这里有两个地方需要注意:

  1. 变量赋值,实际上并没有产生对象的拷贝,仅仅是 “引用” (指针) 的拷贝。比如:

d1 = {'1' : 1, '2' : 2, }

d2 = d1 d2['3'] = 3

for k in d1:

print k, ' => ', d1[k]

上面的代码,我们会发现,d1['3'] 也存在了,而且值就是 3。所以我们可以python 里面的所有变量都想象成指针;所有的变量对变量的 = 操作都想象成指针的赋值,所有的 . 操作都想象成 ->,那么则庶几不会有问题了。