這篇筆記主要記錄,列表作為函式引數傳遞時的深淺拷貝問題
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''這篇筆記主要記錄,列表作為函式引數傳遞時的深淺拷貝問題
'''import copy
def(l=):
def(l=):
defprint_all_list
(a=,b=,c=,log=''):
print log
print
"a:", a
print
"b:", b
print
"c:", c
if __name__ == "__main__":
a = [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
b = [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
c = [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
print_all_list(a,b,c,"原始list:");
print
print_all_list(a,b,c,"對list新增元素,a為賦值、b為淺拷貝、c為深拷貝")
print_all_list(a, b, c, "對list新增元素,a為賦值、b為淺拷貝、c為深拷貝")
## 可見列表、字典等作為函式的引數如果不用拷貝直接賦值,仍然是索引方式
## 字典作為函式引數也類似
''' 輸出:
原始list:
a: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
b: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
c: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
對list新增元素,a為賦值、b為淺拷貝、c為深拷貝
a: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9], [0, 0, 0]]
b: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
c: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
對list新增元素,a為賦值、b為淺拷貝、c為深拷貝
a: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9], [0, 0, 0]]
b: [0, 1, 2, 3, [4, 5, 6, 100], [7, 8, 9]]
c: [0, 1, 2, 3, [4, 5, 6], [7, 8, 9]]
'''
'''
另外,列表作為函式的引數,還有一種情況需要考慮:
字典也有可能發生例如對鍵的值進行修改的情況
'''defget_square_list
(num=0, l=, dic={}):
for i in range(num):
pass
dic[num] = l
print
"list:",l
print
"dict:",dic
print
"l id:",id(l)," | dic id:",id(dic)
defnew_get_square_list
(num=0, l=, dic={}):
ifnot l :
l =
ifnot dic :
dic = {}
for i in range(num):
pass
dic[num] = l
print
"list:",l
print
"dict:",dic
print
"l id:",id(l)," | dic id:",id(dic)
if __name__ == "__main__":
print
"error!!:get_square_list"
get_square_list(2)
get_square_list(3)
'''輸出:
error!!:get_square_list
list: [0, 1]
dict: ## 第一次執行的值是正常的,
l id: 140431170632088 | dic id: 140431170705680
list: [0, 1, 0, 1, 4] ## 第二次的結果累加了前一次的結果。
dict:
l id: 140431170632088 | dic id: 140431170705680 ## 發現兩次呼叫的變數id是同乙個,
## 對變數預設值進行了修改。
'''print
"**優化**"
new_get_square_list(2)
new_get_square_list(5)
'''**優化**
list: [0, 1]
dict:
l id: 140476922003328 | dic id: 140476921956344
list: [0, 1, 4, 9, 16]
dict:
l id: 140476922003328 | dic id: 140476921956344
'''
python列表,字典
1字串處理 s.startswith adfaas s這個字串是不是以adfaas開始 s.endswith adfaas s這個字串是不是以adfaas結束 s.find substring,start end 可指範圍查詢子串,返回索引值,否則返回 1 s.rfind substring,sta...
Python 列表 字典
陣列 只能儲存同一種資料型別的結構 元組tuple 定義列表 定義元組 元組被稱為被帶了緊箍咒的列表,那麼就證明元組與列表的功能類似,只是不如列表強大。元組是不可變的資料型別 不能修改元組中的元素 列表是可變資料型別,可以修改元素。那就有了增刪改查 拿出列表最後乙個元素,最後乙個元素是列表,再拿出列...
列表 字典常用函式
extend iterable 將iterable物件中的元素分別取出追加到列表的最後 lt.extend 鳴人 佐助 櫻 卡卡西 lt.extend lt.extend abcd 注意 extend 函式引數只能接受可迭代物件,123是int值不滿足所以報錯 lt.extend 123 print...