亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對整個列表進行切片的切片分配與直接分配之間有什么區別?

對整個列表進行切片的切片分配與直接分配之間有什么區別?

Cats萌萌 2019-10-12 10:01:45
我在很多地方看到對lists 使用切片分配。與(非默認)索引一起使用時,我能夠理解它的用法,但是我無法理解其用法,例如:a_list[:] = ['foo', 'bar']有什么不同a_list = ['foo', 'bar']?
查看完整描述

3 回答

?
回首憶惘然

TA貢獻1847條經驗 獲得超11個贊

區別是相當大的!在


a_list[:] = ['foo', 'bar']

您修改綁定到名稱的現有列表a_list。另一方面,


a_list = ['foo', 'bar']

為名稱分配一個新列表a_list。


也許這會有所幫助:


a = a_list = ['foo', 'bar'] # another name for the same list

a_list = ['x', 'y'] # reassigns the name a_list

print a # still the original list


a = a_list = ['foo', 'bar']

a_list[:] = ['x', 'y'] # changes the existing list bound to a

print a # a changed too since you changed the object


查看完整回答
反對 回復 2019-10-12
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

通過分配給a_list[:],a_list仍引用相同的列表對象,但內容已修改。通過分配給a_list,a_list現在引用一個新的列表對象。


查看其id:


>>> a_list = []

>>> id(a_list)

32092040

>>> a_list[:] = ['foo', 'bar']

>>> id(a_list)

32092040

>>> a_list = ['foo', 'bar']

>>> id(a_list)

35465096

如您所見,它id不會隨切片分配版本而改變。


兩者之間的不同可能導致完全不同的結果,例如,當列表是函數的參數時:


def foo(a_list):

    a_list[:] = ['foo', 'bar']


a = ['original']

foo(a)

print(a)

與此同時,a也進行了修改,但是如果  a_list = ['foo', 'bar']改用了它,則a保留其原始值。


查看完整回答
反對 回復 2019-10-12
  • 3 回答
  • 0 關注
  • 965 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號