python 共享数据_用Python共享全局数据
a在GlobalDataBase的聲明中分配了一個列表. GlobalDataBase的每個實例都以對同一列表的引用開始,我們將其稱為“原始”列表.
當您在第一個示例中執(zhí)行self.a = value時,為該實例或“self”替換對原始列表的引用,并引用您指定的列表值.創(chuàng)建的任何新實例仍將引用原始列表,這就是為什么gb2打印出一個空列表 – 原始列表,而不是[1,2] – 新列表.
讓我們看看它是如何工作的,使用id:
聲明后,GlobalDataBase保持對以下內(nèi)容的引用:
id(GlobalDataBase.a)
Out[112]: 290675912L #Original
我們創(chuàng)建的任何實例都持有相同的引用:
gb1 = GlobalDataBase()
id(gb1.a)
Out[114]: 290675912L #Original
在copy_to_a之后,您可以看到它已更改:
gb1.copy_to_a([1,2])
id(gb1.a)
Out[116]: 290670536L #Changed!
但是gb2仍然有原始參考:
id(gb2.a)
Out[118]: 290675912L #Original
你說你理解了第二個例子,但為了完整性,當你做self.a.append(value [idx])時,你會追加到原始列表.如上所述,新實例引用了該列表,并“看到”該更改.
在這里我們可以看到引用沒有改變:
gb1 = GlobalDataBase()
id(gb1.a)
Out[120]: 290675912L #Original
gb1.assign_to_a([1,2])
id(gb1.a)
Out[122]: 290675912L #Original
gb2 = GlobalDataBase()
id(gb2.a)
Out[124]: 290675912L #Original
總結(jié)
以上是生活随笔為你收集整理的python 共享数据_用Python共享全局数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不属于python循环结构的是( )_P
- 下一篇: 故障解决:没有未桥接的主机网络适配器