2012-07-06 114 views
0

这是来自完整noob的问题。我有以下代码:重新分配变量值

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

nb是否被覆盖?还是它做了别的事情?

+4

你的第二个任务'NB = '([0-9,E + - ] +)''将覆盖原来的分配'NB =“([ - ]。[0-9] * [0-9] * E [ - +] [0-9] *)''。 – 2012-07-06 08:28:41

+0

Thx,我在一些应用程序的代码中发现了这些语句,我不明白它是什么。 – zgnilec 2012-07-06 08:41:37

回答

5

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

1

第一项任务将在内存中创建一个包含'([ - ] [0-9] *。[0-9] E [ - +] [0-9])'的str实例。

在Python字符串是不变的,所以第二个分配将不会修改所述第一串:它会在包含存储器创建第二字符串实例“([0-9,E + - 。] +)”。

在一些点,垃圾收集器会清除内存中的第一个实例,因为引用计数现在是零(不存在变量引用该字符串了,因为NB点到另一个字符串现在)。

2

更精确地,第二分配替换到第二字符串对象的引用的参考第一字符串对象。

由于第一字符串对象必须不再引用这将是垃圾收集在那个时间或许一段时间后(存储器回收)。