一、賦值操作並沒有建立新列表,只是記憶體位址的賦值操作,兩個列表的記憶體位址是一樣的= 賦值操作並不會建立新物件,只是把乙個變數的記憶體位址賦值給另乙個變數
old_lst = [1, 2, 3]new_lst =old_lst
(id(old_lst))
(id(new_lst))
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
執行結果:
3264538432645384old_lst: [1, 2, 3]
new_lst: [1, 2, 3]
old_lst: [1, 2, 3, 666]
new_lst: [1, 2, 3, 666]
二、 淺拷貝:copy淺拷貝,只拷貝一層內容,複製乙個表面,更深層次的內容,只拷貝乙個記憶體位址。淺拷貝可以通過兩種方式實現,一種是切片賦值,一種是copy()函式
拷貝的意義:快速的建立物件。
1.1.列表切片賦值 兩個列表的記憶體位址不一樣(簡單的列表,列表元素不包括列表型別)
old_lst = [1, 2, 3]new_lst =old_lst[:]
(id(old_lst))
(id(new_lst))
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
執行結果:
4365543243656456old_lst: [1, 2, 3]
new_lst: [1, 2, 3]
old_lst: [1, 2, 3, 666]
new_lst: [1, 2, 3]
1.2.列表切片賦值 兩個列表的記憶體位址不一樣(複雜些的列表,列表元素包括列表型別)
old_lst = [1, [2, 3]]new_lst =old_lst[:]
(id(old_lst))
(id(new_lst))
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
執行結果:
4352429643525384old_lst: [1, [2, 3, 666]]
new_lst: [1, [2, 3, 666]]
2.1.淺拷貝,只拷貝一層,copy() 兩個列表的記憶體位址不一樣(簡單的列表,列表元素不包括列表型別)
old_lst = [1, 2, 3]new_lst =old_lst.copy()
(id(old_lst))
(id(new_lst))
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
執行結果:
4352436043525384old_lst: [1, 2, 3]
new_lst: [1, 2, 3]
old_lst: [1, 2, 3, 666]
new_lst: [1, 2, 3]
2.2.淺拷貝,只拷貝一層,copy() 兩個列表的記憶體位址不一樣(複雜些的列表,列表元素包括列表型別)
old_lst = [1, [2, 3]]new_lst =old_lst.copy()
(id(old_lst))
(id(new_lst))
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
執行結果:
4372090443721992old_lst: [1, [2, 3, 666]]
new_lst: [1, [2, 3, 666]]
三、深拷貝:把內容完全的複製乙份
import copy
copy.deepcopy()
兩個列表的記憶體位址不一樣,兩個列表沒有任何的關聯了
1.1(簡單的列表,列表元素不包括列表型別)
importcopy
old_lst = [1, 2, 3]
new_lst =copy.deepcopy(old_lst)
(id(old_lst))
(id(new_lst))
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
執行結果:
3743060037446088old_lst: [1, 2, 3]
new_lst: [1, 2, 3]
old_lst: [1, 2, 3, 666]
new_lst: [1, 2, 3]
1.2(複雜些的列表,列表元素包括列表型別)
importcopy
old_lst = [1, [2, 3]]
new_lst =copy.deepcopy(old_lst)
(id(old_lst))
(id(new_lst))
print("
old_lst:
", old_lst)
print("
new_lst:
", new_lst)
執行結果:
4378759243804168old_lst: [1, [2, 3, 666]]
new_lst: [1, [2, 3]]
四、函式的預設值引數型別如果是可變型別的,注意,這個引數是共享的(大坑哦)(不可變引數:str bool int tuple)
1.1 例項一
def func(lst=):(id(lst), lst)
func()
func()
func()
執行結果:
36175624 [123]36175624 [123, 123]
36175624 [123, 123, 123]
1.2 例項二
函式的預設值引數型別如果是可變型別的,注意,這個引數是共享的(大坑哦)
def func(lst=):(id(lst), lst)
func()
func()
func()
執行結果:
43384584 [123]43394440 [123]
43384584 [123, 123]
python3 列表和元組
序列是python中最基本的資料結構。序列中的每個元素都分配乙個數字 它的位置,或索引,第乙個索引是0,第二個索引是1,依此類推。最後乙個為 1,倒數第二個為 2,以此類推。這就意味著我們可以從第乙個元素向前或向後計數了。索引示例 greeting hello greeting 0 h greeti...
python3 列表練習
python 列表綜合練習 使用 python 語言建立空列表 score,按學號順序 由小到大 儲存多個學生 一門課程的考試成績。呼叫列表操作的常用函式實現以下功能 1 建立乙個空列表 score 68,87,92,100,76,88,54,89,76,61 3 輸出score 列表中第 3 個元...
python3 列表函式
python中列表是可變的,這是它區別於字串和元組的最重要的特點,一句話概括即 列表可以修改,而字串和元組不能。列表函式 含義把乙個元素新增到列表的結尾,相當於 a len a x list.extend l 通過新增指定列表的所有元素來擴充列表,相當於 a len a l。list.insert ...