引用針對變數的時候,傳遞引用後,對引用後的物件的值進行改變是不會影響到原值的:
name =
"zhangsan"
student = name
name =
"lisi"
print
(name)
print
(student)
輸出
lisi
zhangsan
2.1、直接引用「=」
列表的引用其實就是相當於把前面乙個列表的位址同時給了乙個新的列表用。結果這兩個列表都指向了同一位址;而這個位址裡面本身就只能存放一組資料,不管是對這兩個列表誰進行操作都會把這個位址中的資料重新更新;也因此列表可以用來形參的傳遞來改變實參的值,而變數不同,變數的形參傳遞是不會改變實參的值的;
list=[
0,1,
2,3,
4,5]
num =
list
print
(num)
list[1
]='hello'
print
(list
)print
(num)
返回
[0,
1,2,
3,4,
5][0
,'hello',2
,3,4
,5][
0,'hello',2
,3,4,5]
2.2、淺複製copy()
在處理列表和字典時,儘管傳遞引用通常是處理列表和字典的最方便的方法,但如果函式修改了傳遞的列表或字典,您可能不希望在原始列表或字典值中進行這些更改。為此,python提供了乙個叫 copy 的模組。它有 copy() 和 deepcopy() 兩個函式。copy.copy() 會拷貝列表和字典的值,而不是只拷貝了引用。
names =
["134zhangsan"
,"lisi"
,"@!#wangwu"
,"zhangsan"
,"1zhaoliu"
,"中文"
]names2=names.copy(
)print
("names的值為:"
,names)
print
("names2的值為:"
,names2)
names[1]
="111"
print
("修改後names的值為:"
,names)
print
("修改後names2的值為:"
,names2)
返回如下圖:
由此可見names和names2變數引用了不同的列表。因此改動names並不會改動到 snames2。names和names2所儲存的引用id是不一樣的。
2.3、直接賦值和 copy 的區別
「=」: 直接引用物件
copy():淺copy:深拷貝父物件(一級目錄),子物件(二級目錄)不拷貝,還是引用
dict1 =
dict2 = dict1 # 淺拷貝: 引用物件
dict3 = dict1.copy(
)# 淺拷貝:深拷貝父物件(一級目錄),子物件(二級目錄)不拷貝,還是引用
#修改 data 資料
dict1[
'user']=
'root'
dict1[
'num'
].remove(1)
print
(dict1)
print
(dict2)
print
(dict3)
返回
import copy
names =
["134zhangsan"
,"lisi"
,"@!#wangwu",[
"aa"
,"bb"],
"zhangsan"
,"1zhaoliu"
,"中文"
]p1=copy.copy(names)
#第一種方式
print
(p1)
p2=names[:]
#切片,第二種方式
print
(p2)
p3=list
(names)
#list,第三種方式
print
(p3)
返回
[
'134zhangsan'
,'lisi'
,'@!#wangwu',[
'aa'
,'bb'],
'zhangsan'
,'1zhaoliu'
,'中文'][
'134zhangsan'
,'lisi'
,'@!#wangwu',[
'aa'
,'bb'],
'zhangsan'
,'1zhaoliu'
,'中文'][
'134zhangsan'
,'lisi'
,'@!#wangwu',[
'aa'
,'bb'],
'zhangsan'
,'1zhaoliu'
,'中文'
]
python 列表和字典的引用與複製 copy
列表或字典的引用 引用針對變數的時候,傳遞引用後,對引用後的物件的值進行改變是不會影響到原值的 而列表不一樣如 spam 42 cheese spam spam 100 print spam out 100 print cheese out 42 如果對列表進行引用會是什麼情況呢,我們來看看 spa...
4 5 引用與複製建構函式
1 什麼是引用?引用又稱 別名 alias 是一種非常特殊的資料型別。它不是定義乙個新的變數,而是給乙個已經定義的變數重新起乙個別名,也就是c 系統不為引用型別變數分配記憶體空間。引用主要用於函式之間的資料傳遞。引用定義的格式為 型別 引用變數名 已定義過的變數名 例如 double number ...
總結3 引用
int a 10 int b a b就是a的別名 b 200 修改變數a中的內容 printf a d n b d n a,b a 與 b 的位址是相同的 在c中相當於以下效果 int const b a b 200 1.1 普通引用 舉例void swap int a,int b 1.2 引用所佔...