Python共享引用和原處修改

2021-09-17 01:17:00 字數 885 閱讀 3508

在python中,變數總是乙個指向物件的指標,而不是可改變的記憶體區域的標籤:給乙個變數賦乙個新的值,並不是替換了原始物件,而是讓這個變數去引用完全不同的乙個物件。實際的效果就是對乙個不支援原處修改的變數賦值,僅僅會影響那個被賦值的變數。但對於支援在原處修改的物件,共享引用時需倍加小心,因為對乙個變數名的修改會影響其他的變數。

如下圖:

可見,對不可變物件(數字,字串,元組等)的共享引用,改變乙個變數不會影響另乙個變數

而對於可變物件(列表,字典,集合等)的共享引用,當修改乙個變數所引用物件的值時,會影響到另乙個變數

要想避免這種情況發生,需要拷貝物件,而不是建立引用。

python中有很多拷貝乙個列表的方法,包括內建列表函式以及標準庫的copy模組等。但最常用的辦法就是從頭到尾分片。

但分片這種技術不能應用在字典,集合這樣的核心型別上,因為它們不是序列。

複製乙個字典或集合應該使用x.copy()方法:

import copy

a = copy.copy(b)

c = copy.deepcopy(d) #深度拷貝,拷貝巢狀物件

python 共享引用

在上一節中,我給大家介紹了單個變數被賦值引用多個物件的情況。然而,單個 乙個 物件被多個變數引用又是怎麼一回事兒呢?a 3 b a 先上圖 圖1 吧,大家一看就一目了然了 變數名和物件,在執行賦值語句b a之後,變數a,b都指向了物件3的記憶體空間.假設這時執行 a python a將指向剛建立的字...

python共享引用

對於可變值 比如列表 當多個變數指向同乙個可變值時,它們就會共享同乙個引用 它們都指向同乙個值。通過其中乙個變數對值所作出的修改會影響到其他所有的變數,原因就是只有乙個共享的副本。mike khakis dress shirt jacket mr dawson mike honey mike hon...

報表修改和共享Session

reprot service 的報表經驗 1如果需要更換密碼時,要在報表後台pager pager.aspx頁面將管理員角色賦予新增的使用者,同時在iis中的report service中的許可權選項也必須賦予新增使用者 2如果在找開報表時遇到沒有認證的問題,在 開始 sql 配置 將資料庫初始化選...