亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3899 | 回復(fù): 4
打印 上一主題 下一主題

在"for xxx in yyy"中,我們得到的xxx是什么? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-05-23 17:00 |只看該作者 |倒序瀏覽
對一個簡單的list循環(huán),并嘗試改變其值,結(jié)果沒有發(fā)生變化



對一個dictionary的list循環(huán),則可以改變list的值

論壇徽章:
0
2 [報告]
發(fā)表于 2011-05-23 17:12 |只看該作者
你要知道,所有的變量名都僅僅是引用

在"for i in (1,2,3)"里,i會分別指向1,2,3
之后你用i=0,按你的想法就相當于1=0,2=0,3=0,這是完全不可能發(fā)生的
實際發(fā)生的情況是,變量i改為指向0

后一個例子你并沒有給i直接賦值,而是操作i的屬性,這是完全可以的
雖然前一個例子中理論上你也可以嘗試修改i的屬性,但整數(shù)是不可變類,你真的去修改的話會報錯

論壇徽章:
0
3 [報告]
發(fā)表于 2011-05-23 17:15 |只看該作者
python內(nèi)建類型分為可變的和不可改變的
list1 = [1, 2, 3]
for i in list1:
    i = 0
這里i是int類型,是不可變對象,對于每一次循環(huán)獲得的i僅僅是值相同的另外一個對象而已。
循環(huán)內(nèi)所做的任務(wù)操作都不會影響到list1中的對象。
對于dict:
for i in dict:
    i['id'] = i['id'] + 1
循環(huán)中的每個i對象是一個dict對象,是mutable,因此他們都是dict每個元素的引用而已,都指向了同一個對象,所有循環(huán)內(nèi)部對元素的操作影響到了原來的對象。

論壇徽章:
0
4 [報告]
發(fā)表于 2011-05-24 08:48 |只看該作者
謝謝!

查了一些文檔中關(guān)于mutable和immutable的資料,有一些收獲

但這里的問題與mutable/immutable還完全是一回事
比如list是一個mutable的數(shù)據(jù)類型
list = [[1,2],[3,4]]
for i in list:
     i = []    #這個肯定是不行的
     i.pop() #這個就是可以的

所以我覺得這里我是搞混了變量和對象實例的關(guān)系
變量可以通過賦值來改變,對象實例則不能通過賦值來改變內(nèi)容
而for xxx in yyy中得到的xxx應(yīng)該就是對象實例
如果這個對象的類型是mutable的,那xxx可以改變,否則不可改變
但是這種改變不能通過賦值操作進行

論壇徽章:
0
5 [報告]
發(fā)表于 2011-05-24 09:09 |只看該作者
本帖最后由 ccporxy 于 2011-05-24 09:27 編輯

python中的賦值操作符,僅僅是創(chuàng)建一個對象,然后把變量名和對象關(guān)聯(lián);或者是把變量名和‘=’號右值所引用對象關(guān)聯(lián),內(nèi)部通過dict映射來表示。
之前與變量名相關(guān)聯(lián)的對象,則會引用計數(shù)-1,然后根據(jù)引用計數(shù)來判斷對象是否該銷毀還是繼續(xù)保留。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP