python中 list 修改 再次反思 .
最近讀書的時候,一些感悟,記錄一下. 之前有寫過有關列表中修改值的注意事項, 暫且把這個叫做 python 列表總結二
可以參考一下這個:
python修改列表問題總結
1 來看乙個例子
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
l = list(range(10))
for num in l:
num *= 2
print(l)
result:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
這裡列表元素沒有發生改變.
2 來看下乙個例子
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""@author: frank
@contact: [email protected]
@file: 33.py
@time: 2018/9/14 下午7:41
"""if __name__ == '__main__':
l = [['a'], ['b'], ['c'], ['d']]
for number in l:
number*=2
print(l)
result:
[['a', 'a'], ['b', 'b'], ['c', 'c'], ['d', 'd']]
可以看出列表元素的值發生了改變.
同樣的** 為啥乙個 元素值發生了改變,而乙個沒有呢?在解釋其環境裡面實驗一下參考 流暢的python 8.4 節
python 裡面 是 函式引數作為引用的時候,
python 支援的 引數傳遞模式 是 共享傳引數 ,
共享傳引數的各個形式引數 獲得實參中各個 引用的副本. 也就是說 , 函式內部 的形參是實參的別名.
這種的結果是什麼呢?
函式可能 修改 作為引數的可變的物件 ,卻沒有辦法修改那些物件上的標識. (即不能把乙個物件 替換成另外乙個物件)
簡單來說,如果是可變物件可以直接修改物件的值 ,如果是不可變物件是沒有辦法直接在原來的物件進行 修改的.
下面的例子可以說明這一點..
person_tuple = tuple(['name','frank'])
hobby_tuple =tuple(['swimming'])
person_tuple = tuple(['name','frank'])
hobby_tuple =tuple(['swimming'])
person_tuple
('name', 'frank')
hobby_tuple
('swimming',)
id(person_tuple),id(hobby_tuple)
(4458632456, 4458598864)
person_tuple+hobby_tuple
('name', 'frank', 'swimming')
person_tuple
('name', 'frank')
person_tuple+=hobby_tuple
person_tuple
('name', 'frank', 'swimming')
id(person_tuple)
4458568872
python 中 元祖是不可變物件, 所以 在進行 += 的時候,python 並沒有報錯,而是直接申請另乙個空間來重新存 修改後的值.
可以看出 4458632456 ,和 4458568872 是不一樣的. 所以python 解釋其會計算值,之後賦給這個 person_tuple 物件,原來的person_tuple 會被釋放掉了.
這就是元祖的不可變性,就是沒有辦法在原來的tuple 新增元素.
3 在看乙個流暢的python書中的乙個例子
在直譯器環境下面:
def
add(x,y):
x += y
return x
x ,y =10,20
add(x,y)30x
10y20x=[1,2]
y=['frank','chang']
add(x,y)
[1, 2, 'frank', 'chang']
x[1, 2, 'frank', 'chang']
同樣是 x,y 但是如果 x,y 是不可變型別, x+=y 並不會改變 x 的值.
如果 x,y 是可變型別, x+=y就會 修改x 的值.
4 總結
對於用for 迭代 可迭代物件的時候,列表中是否可以修改元素取決於,列表的元素是不是可變的物件, 如果是就可以修改.
分享快樂,留住感動.2018-09-14 23:01:55 –frank
python列表總結
1 表示方式 中括號 list轉化,例如a list abcdef 2 列表重新賦值 a 1 b 或者a 1 1,2,3 或者a 4 2 1,2 3 判斷元素是否在列表中 1 in a 元素1在列表a中,將會返回布林值 4 合併 a b或a.extend b 5 列表中元素的個數 a.count 1...
python 列表 總結
在python裡建立列表和字典非常簡單,這裡總結一下它們的常用方法 1.建立列表 myarry one two three 訪問列表中資料的方法有很多種 可以用len x 方法檢視列表的長度 len myarry 會輸出 3 對列表進行增刪改操作 aaa 也可以使用extend iter 方法在末尾...
Python列表總結(1)
定義和操作列表 list 定義列表 list.insert loc,value loc是列表中的索引 從0開始 value為插入的值 list.pop 刪除並返回最後乙個元素 del list loc 刪除list中loc號元素,在知道索引的前提下可刪除任何位置的元素 list.remove val...