當前位置:成語大全網 - 書法字典 - 這是python中的bug嗎?

這是python中的bug嗎?

呵呵,我來回答壹下。

這是妳提到的第壹種情況:

=====

類別數據:

def _ _ init _ _(self,data):

self.data =數據

然後分別執行以下代碼:

d 1 = data(“123“);d2 =數據(“345”)

D1.data返回“123”,d2.data返回“345”。

執行d2.data=d1.data後,D2 . data =“123“。

執行del(d 1 . data)後,d2.data將返回語法錯誤。

=====

這種情況不可能發生。測的時候是錯字嗎?經過我的測試,不會錯的。

& gt& gt& gtd1 =數據(“123“)

& gt& gt& gtd2 =數據(“345”)

& gt& gt& gtd1.data

'123'

& gt& gt& gtd2 .數據

'345'

& gt& gt& gtid(d 1 . data)

872552800

& gt& gt& gtid(D2 . data)

872552608

& gt& gt& gtd2.data = d1.data

& gt& gt& gtid(d 1 . data)

872552800

& gt& gt& gtid(d2 . data)#此時d1和D2的數據對象指向同壹事物。

872552800

& gt& gt& gtd2 .數據

'123'

& gt& gt& gtDel d1.data #刪除了d1類中的數據對象。

& gt& gt& gtid(D2 . data)# D2 . data仍然指向內存中“123”的地址。

872552800

& gt& gt& gtd2 .數據

'123'

Python有壹個返回對象id的ID方法。

& gt& gt& gtid(d 1 . data)

872552800

這對妳調試這個問題應該很有幫助。

此外,在python中,調用del方法只會刪除該對象對內存中數據的引用。我希望這個例子能徹底幫助妳:

& gt& gt& gta =“python“

& gt& gt& gt身份證(a)

871561600

& gt& gt& gt德爾a

& gt& gt& gta

回溯(最近壹次呼叫):

文件“<標準輸入》,第1行,in & lt模塊& gt

名稱錯誤:未定義名稱“a”

& gt& gt& gtb =“python“

& gt& gt& gt身份證(b)

871561600

我們可以看到,當我們調用del a方法時,我們只刪除了對“python”字符串的引用,而內存中“python”字符串的id保持不變。

python的副本僅使另壹個變量指向與前壹個變量相同的地址,例如:

& gt& gt& gtA =“test“#定義壹個值為“test“的變量A。

& gt& gt& gt#查看的Id。

872553312

& gt& gt& gtB = a #將A復制到b。

& gt& gt& gtb

測試

& gt& gt& gtid(b)# b和a實際上指向內存中的同壹地址。

872553312

可以推薦樓主再看壹下python的淺層拷貝和深層拷貝,可以多了解壹下python的存儲機制:

& gt& gt& gta =

& gt& gt& gtb = a

& gt& gt& gta【0】=“a”

& gt& gt& gta

【‘a‘,2,3】

& gt& gt& gtb

【‘a‘,2,3】

& gt& gt& gt導入副本

& gt& gt& gtc = copy . deepcopy(a)

& gt& gt& gta

【‘a‘,2,3】

& gt& gt& gtc

【‘a‘,2,3】

& gt& gt& gta【0】=“更改”

& gt& gt& gta

【‘改變‘,2,3】

& gt& gt& gtb

【‘改變‘,2,3】

& gt& gt& gtc

【‘a‘,2,3】