摘要:每個變量都有標(biāo)識類型和值對象一旦創(chuàng)建它的標(biāo)識絕不會變標(biāo)識可以簡單的理解為對象在內(nèi)存中的地址別名跟是別名指向如果增加新的內(nèi)容也會增加相等性為運算符比較連個對象的值對象中保存的數(shù)據(jù)標(biāo)識為因為他們都指向這個列表比較對象的標(biāo)識元組相對不可變性元組保
a = [1,2,3,4] b = a
每個變量都有標(biāo)識,類型和值.對象一旦創(chuàng)建,它的標(biāo)識絕不會變;標(biāo)識可以簡單的理解為對象在內(nèi)存中的地址.
別名 a 跟 b 是別名指向 [1,2,3,4],如果a增加新的內(nèi)容,b也會增加.
相等性 b == a 為 true.==運算符比較連個對象的值(對象中保存的數(shù)據(jù))
標(biāo)識 b is a 為true,因為他們都指向 [1,2,3,4] 這個列表,is比較對象的標(biāo)識
元組相對不可變性
元組保存對象的引用,跟python的集合set一樣,如果引用的元素是可變的,即便元組本身不可變,元素依然可變.即:元組的不可變形其實指tuple數(shù)據(jù)結(jié)構(gòu)的物理內(nèi)容(即保存的引用)不可變,與引用對象無關(guān)
默認(rèn)做淺層復(fù)制
淺層復(fù)制 : 1.復(fù)制了最外層容器,副本中的元素是源容器中元素的引用 2.他們的值相等,單兩者指向不同的對象. 3.副本共享內(nèi)部對象的引用
淺層復(fù)制
若所有元素都是不可變的,不存在任何問題,并節(jié)省了內(nèi)存.
如果存在可變的元素,如list會導(dǎo)致意想不到的問題.
l1 = [3,[66,55,44],(7,8,9)] l2 = list(l1) l1.append(100) # 由于只復(fù)制了外層容器,這里僅有l(wèi)1內(nèi)容發(fā)生變化 l1[1].remove(55) # l1[1] 是一個list可變的元素,所有以l2[1]的元素也發(fā)生變化 l2[1] +=[33,22] l2[2] += (10,11) # l2[2]是tuple,不可變的元素所有只有l(wèi)2[2]發(fā)生變化.
深層復(fù)制,副本不共享內(nèi)部對象的引用
函數(shù)的參數(shù)作為引用時
python中唯一支持的參數(shù)傳遞模式是共享傳參 call by sharing
共享傳參:函數(shù)的各個形式參數(shù)獲得實參中各個運用的副本,即是函數(shù)內(nèi)部的形參是實參的別名
影響:函數(shù)可能會修改作為參數(shù)傳入的可變對象,但無法修改那些對象的標(biāo)識
不要使用可變類型作為參數(shù)的默認(rèn)值
可變參數(shù)作為默認(rèn)值會導(dǎo)致:如果么有指定內(nèi)容,會共用一個對象.所以通常使用Nono作為接收可變值得參數(shù)的默認(rèn)值.
防御可變參數(shù)
如果定義函數(shù)的接受可變參數(shù),應(yīng)該謹(jǐn)慎的考慮調(diào)用方是否期望修改傳入的參數(shù).
del和垃圾回收
對象絕不會自行銷毀;然而,無法得到對象時,可能會被當(dāng)做垃圾處理.一個對象的引用數(shù)量為0的話會被銷毀
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42372.html
摘要:一對象引用基礎(chǔ)知識變量是標(biāo)注而不是容器。也就是說元組中不可變的是元素的標(biāo)識,但元組的值會隨著引用的可變對象變化而變化。在中每個對象的引用都會有統(tǒng)計。弱引用不會妨礙對象被當(dāng)做垃圾回收。 導(dǎo)語:本文章記錄了本人在學(xué)習(xí)Python基礎(chǔ)之面向?qū)ο笃闹攸c知識及個人心得,打算入門Python的朋友們可以來一起學(xué)習(xí)并交流。 本文重點: 1、明確變量保存的是引用這一本質(zhì);2、熟悉對象引用的基礎(chǔ)知識;...
摘要:函數(shù)的參數(shù)作為引用時唯一支持的參數(shù)傳遞模式是共享傳參,它指函數(shù)的形參獲得實參中各個引用的副本,即形參是實參的別名。而在上面這個例子中,類的屬性實際上是形參所指向的對象所指對象,的別名。 《流暢的Python》筆記本篇是面向?qū)ο髴T用方法的第一篇,一共六篇。本篇主要是一些概念性的討論,內(nèi)容有:Python中的變量,對象標(biāo)識,值,別名,元組的某些特性,深淺復(fù)制,引用,函數(shù)參數(shù),垃圾回收,de...
摘要:運算符比較兩個對象的標(biāo)識函數(shù)返回對象標(biāo)識的整數(shù)表示。實際上,每個對象都會統(tǒng)計有多少引用指向自己。對象被銷毀了,調(diào)用了回調(diào),的值變成了。當(dāng)對象的引用數(shù)量歸零后,垃圾回收程序會把對象銷毀。引用的目標(biāo)對象稱為所指對象。 對象不是個盒子 showImg(https://segmentfault.com/img/bV95mW?w=1784&h=988); class Gizmo: def...
摘要:對象引用和可變性變量不是盒子,而是便利貼變量的賦值方式比如是將一個變量分配給一個對象比如整數(shù)。運算符比較兩個對象的標(biāo)識函數(shù)返回對象標(biāo)識的整數(shù)表示。每個對象都會統(tǒng)計有多少引用指向自己。對象被銷毀執(zhí)行回調(diào)函數(shù)輸出 對象引用和可變性 變量不是盒子,而是‘便利貼’ >>> a = [1,2,3] >>> b = a >>> a.append(5) >>> a [1, 2, 3, 5] >>> ...
摘要:每個對象均有標(biāo)識符類型值。通常我們認(rèn)為當(dāng)這些對象被垃圾回收機制回收時,它占用的外部資源即被釋放。造物主類型對象的類型幾乎影響了該對象的所有功能,在某種程度上,對象的標(biāo)識符也受其類型的影響。 原文地址 對象 對象(Objects)是python中數(shù)據(jù)的抽象,python中所有的數(shù)據(jù)均可以用對象或者是對象之間的關(guān)系來表示。每個對象均有標(biāo)識符(identity)、類型(type)、值(val...
閱讀 2570·2021-11-23 09:51
閱讀 3365·2021-11-22 15:22
閱讀 1878·2021-11-18 13:22
閱讀 2273·2021-09-24 09:48
閱讀 1318·2019-08-29 13:58
閱讀 1309·2019-08-26 13:39
閱讀 2452·2019-08-26 10:48
閱讀 3040·2019-08-26 10:21