0

这是一个完全菜鸟的问题。我有以下代码:

nb='([- ][0-9]*.[0-9]*E[-+ ][0-9]*)'
nb='([0-9,E.+-]+)'

是否被nb覆盖?还是它做其他事情?

4

3 回答 3

5

nb现在绑定到第二个字符串'([0-9,E.+-]+)'. 所以你的第一个任务不再重要。请记住,这nb只是一个名称,在之前指向第一个字符串之后现在指向第二个字符串,您没有修改任何字符串。

于 2012-07-06T08:34:25.663 回答
2

更准确地说,第二个赋值用对第二个字符串对象的引用替换了对第一个字符串对象的引用。

由于第一个字符串对象不再有对它的引用,因此将在那个时候或一段时间后进行垃圾收集(内存回收)。

于 2012-07-06T08:43:46.613 回答
1

第一个赋值将在内存中创建一个 str 类型的实例,其中包含 '([- ][0-9]*.[0-9] E[-+ ][0-9] )'。

在 Python 中,字符串是不可变的,因此第二个赋值不会修改第一个字符串:它将在内存中创建第二个包含 '([0-9,E.+-]+)' 的字符串实例。

在某些时候,垃圾收集器将从内存中擦除第一个实例,因为引用计数现在为零(不再有变量引用该字符串,因为 nb 现在指向另一个字符串)。

于 2012-07-06T08:39:16.977 回答