重新分配变量的值

时间:2012-07-06 08:27:29

标签: python string

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

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

nb是否被覆盖?或者它做了别的什么?

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

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