深拷貝和淺拷貝
可變類型與不可變類型
- 可變對(duì)象是指,一個(gè)對(duì)象在不改變其引用的前提下,可以修改其所指向的地址中的值
- 不可變對(duì)象是指,一個(gè)對(duì)象引用指向的值是不能修改的
淺拷貝
- 淺拷貝是對(duì)于一個(gè)對(duì)象的頂層拷貝;
- 簡(jiǎn)單理解就是,拷貝了引用,并沒有拷貝內(nèi)容
- 這也就意味著,只要修改其中一個(gè)引用的內(nèi)容,其它引用的地方也都會(huì)改變
深拷貝
- 會(huì)拷貝引用指定的值,放入新生成的內(nèi)存空間中
- 引用也會(huì)重新生成
**示例
**
import copy
# 淺拷貝
a=[1,3]
b=a
a.append(4)
# 引用地址一樣,操作其中一個(gè)引用添加數(shù)據(jù),另一個(gè)也會(huì)變
print("淺拷貝..............")
print(id(a))
print(id(b))
print(a)
print(b)
# 深拷貝
c=[1,3]
d=copy.deepcopy(c)
c.append(4)
# 引用不一樣了,利用其中一個(gè)修改了值,另一個(gè)不會(huì)改變
print("深拷貝..............")
print(id(c))
print(id(d))
print(c)
print(d)
**輸出結(jié)果
**

總結(jié):不管是淺拷貝還是深拷貝都會(huì)生成一個(gè)看起來(lái)相同的對(duì)象,他們本質(zhì)的區(qū)別是拷貝出來(lái)的對(duì)象的地址是否和原對(duì)象一樣, 也就是地址的復(fù)制還是值的復(fù)制的區(qū)別
**私有化、import、面向?qū)ο?**
方法私有化
- xx:公有變量
- _x: 單前置下劃線,私有化屬性或方法,類對(duì)象和子類可以訪問(wèn),但禁止導(dǎo)入
- __xx:雙前置下劃線,避免與子類中的屬性命名沖突,無(wú)法在外部直接訪問(wèn)
- xx :雙前后下劃線,用戶名字空間的魔法對(duì)象或?qū)傩?。例如?strong>init
- xx_:?jiǎn)魏笾孟聞澗€,用于避免與Python關(guān)鍵詞沖突
示例
class Test:
# 初始化方法
def __init__(self,name,age,sex):
# 公有變量
self.name=name
# 私有化屬性
self._age=age
# 外部無(wú)法直接訪問(wèn)
self.__sex=sex
def show(self):
print(self.name)
print(self._age)
print(self.__sex)
test=Test("as",12,"男")
test.show()
import 導(dǎo)入模塊
- import 搜索路徑
- 從下面列出的目錄里面依次查找要導(dǎo)入的模塊文件
- '' 表示當(dāng)前路徑
- 列表中路徑的先后順序代表了 python 解釋器在搜索模塊時(shí)的先后順序

- 程序添加路徑
- sys.path.append() 在末尾添加路徑
- sys.path.insert() 在指定位置插入路徑

類方法類型
方法包括:實(shí)例方法、靜態(tài)方法和類方法,三種方法在內(nèi)存中都?xì)w屬于類,區(qū)別在于調(diào)用方式不同
- 實(shí)例方法:由對(duì)象調(diào)用,至少有一個(gè)self參數(shù),執(zhí)行實(shí)例方法時(shí),自動(dòng)將調(diào)用該方法的對(duì)象賦值給self
- 類方法:由類調(diào)用,至少一個(gè)cls參數(shù),執(zhí)行類方法時(shí),自動(dòng)將調(diào)用該方法的類賦值給cls
- 靜態(tài)方法:由類直接調(diào)用,可以沒有任何參數(shù)
- property方法: 一種與實(shí)例方法相似的特殊方法,使用方法如下
- 定義時(shí),在實(shí)例方法上加 @property 注解,并只有 self一個(gè)參數(shù)
- 調(diào)用時(shí),無(wú)需括號(hào)
- property 有三種訪問(wèn)方式,分別對(duì)應(yīng)三個(gè)被 @property、@方法名.setter、@方法名.deleter 修飾的方法
示例
class Test:
age =12
def __init__(self,name):
self.name=name
def instance_method(self):
"""實(shí)例方法,至少有一個(gè)self參數(shù)"""
print("這是實(shí)例方法,name值是:",self.name)
@classmethod
def class_method(cls,age):
"""類方法,至少有一個(gè)cls參數(shù)"""
cls.age=age
print("這是類方法,age值是:",cls.age)
@staticmethod
def static_method():
"""這是靜態(tài)方法,可以沒有任何參數(shù)"""
print("這是靜態(tài)方法")
@property
def count(self):
"""這是property特殊屬性"""
return 11
@count.setter
def count(self,value):
print("property設(shè)置值為:",value)
@count.deleter
def count(self):
print("property刪除")
test=Test("張三")
#調(diào)用實(shí)例方法
test.instance_method()
#調(diào)用類方法
Test.class_method(22)
# 調(diào)用靜態(tài)方法
Test.static_method()
# 調(diào)用property方法
aa=test.count
print(aa)
test.count=44
del test.count
輸出結(jié)果

property的第二種用法
class Test2:
def get_count(self):
return 22
def set_count(self,value):
print("設(shè)置值:",value)
def del_count(self):
print("刪除值")
# property 方法有四個(gè)參數(shù)
# 第一個(gè)參數(shù)是方法名,調(diào)用對(duì)象.屬性 時(shí)執(zhí)行方法
# 第二個(gè)參數(shù)是方法名, 調(diào)用對(duì)象.屬性 = XXX 時(shí),執(zhí)行方法
# 第三個(gè)參數(shù)是方法名,調(diào)用 del 對(duì)象.屬性 時(shí),執(zhí)行方法
# 第四個(gè)參數(shù)是字符串,調(diào)用 對(duì)象.屬性.__doc__ ,此參數(shù)是該屬性的描述信息
cc=property(get_count,set_count,del_count,"ssssssss")
test2=Test2()
c=test2.cc
print(c)
test2.cc=444
del test2.cc
doc=test2.cc.__doc__
print(doc)
輸出結(jié)果

魔法屬性
doc 表示類的描述信息
class Tee:
""" 描述類的信息 ,xxxxxxxxxxxxxxxxxxxxxx"""
def __init__(self):
pass
print(Tee.__doc__)
輸出結(jié)果

module 和 class
- module 表示當(dāng)前操作的對(duì)象在哪個(gè)模塊
- class 表示當(dāng)前操作的對(duì)象類是什么
class Dog:
def __init__(self,name):
self.name=name
dog=Dog("小白")
print(dog.__module__)
print(dog.__class__)
輸出結(jié)果

init
- 初始化方法:通過(guò)類創(chuàng)建對(duì)象時(shí),自動(dòng)觸發(fā)執(zhí)行
class Dog:
def __init__(self,name):
self.name=name
dog=Dog("小白")
del
- 當(dāng)對(duì)象在內(nèi)存中被釋放時(shí),自動(dòng)觸發(fā)執(zhí)行
- 此方法一般不用定義,程序員在使用時(shí)無(wú)需關(guān)心內(nèi)存的分配和釋放,Python解釋器會(huì)自動(dòng)執(zhí)行,所以 del 的調(diào)用是由解釋器在進(jìn)行垃圾回收時(shí)自動(dòng)觸發(fā)執(zhí)行
class Dog:
def __del__(self):
pass
with與“上下文管理器”
# 普通版,此部分有一個(gè)潛在問(wèn)題,即如果在write時(shí)發(fā)生異常,則close不會(huì)被調(diào)用,資源將得不到釋放
def t1():
f=open("aa.txt","w")
f.write("hello world!")
f.close()
# 升級(jí)版本, 此處可以保證發(fā)生異常時(shí),資源能得到釋放. 但是代碼寫得比較復(fù)雜
def t2():
f = open("aa.txt", "w")
try:
f.write("hello world!")
except Exception as e:
print("發(fā)生錯(cuò)誤!!")
finally:
f.close()
# 高級(jí)版,此處使用 with的作用和使用 try/finally 語(yǔ)句是一樣的,并且寫法更簡(jiǎn)潔
def t3():
with open("aa.txt", "w") as f:
f.write("hello world!")
什么是上下文
- 上下文在不同的地方表示不同的含義,與文章的上下文含義一樣。
上下文管理器
- 任何實(shí)現(xiàn)了 enter 和 exit 方法的對(duì)象都可以稱為上下文管理器,上下文管理器可以使用 with 關(guān)鍵字。文件(file) 對(duì)象也實(shí)現(xiàn)了上下文管理器
示例
# 自定義一個(gè)文件類,作為上下文管理器
class MyFile:
def __init__(self,filename,mode):
self.filename=filename
self.mode=mode
# 返回資源對(duì)象
def __enter__(self):
self.f=open(self.filename,self.mode)
return self.f
# 處理一些清除工作
def __exit__(self, exc_type, exc_val, exc_tb):
self.f.close()
with MyFile("aa.txt","w") as f:
f.write("sssssss")
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
對(duì)象
+關(guān)注
關(guān)注
1文章
38瀏覽量
17696 -
地址
+關(guān)注
關(guān)注
1文章
32瀏覽量
11186 -
引用
+關(guān)注
關(guān)注
0文章
8瀏覽量
7914
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
為何Python運(yùn)行效率低?python語(yǔ)言入門
卡,影響運(yùn)行效率。以上是影響Python運(yùn)行效率的五大原因,那么該如何進(jìn)行優(yōu)化呢?這個(gè)就需要您進(jìn)行下一步的深入了解啦!
發(fā)表于 02-01 18:47
Python編程語(yǔ)言可以應(yīng)用在哪些方面?
領(lǐng)域,Python幾乎是霸主地位,將網(wǎng)絡(luò)一切數(shù)據(jù)作為資源,通過(guò)自動(dòng)化程序進(jìn)行有針對(duì)性的數(shù)據(jù)采集以及處理。從事該領(lǐng)域應(yīng)學(xué)習(xí)爬蟲策略、高性能異步IO、分布式爬蟲等,并針對(duì)Scrapy框架源碼進(jìn)行深入剖析
發(fā)表于 02-05 17:50
學(xué)python有哪些方向?
是Python學(xué)習(xí)的另一方向,網(wǎng)絡(luò)編程在生活和開發(fā)中無(wú)處不在,哪里有通訊就有網(wǎng)絡(luò),它可以稱為是一切開發(fā)的“基石”。對(duì)于所有編程開發(fā)人員必須要知其然并知其所以然,所以網(wǎng)絡(luò)部分將從協(xié)議、封包、解包等底層進(jìn)行深入剖析
發(fā)表于 03-09 15:47
Python十大應(yīng)用領(lǐng)域和就業(yè)方向
領(lǐng)域,Python幾乎是霸主地位,將網(wǎng)絡(luò)一切數(shù)據(jù)作為資源,通過(guò)自動(dòng)化程序進(jìn)行有針對(duì)性的數(shù)據(jù)采集以及處理。從事該領(lǐng)域應(yīng)學(xué)習(xí)爬蟲策略、高性能異步IO、分布式爬蟲等,并針對(duì)Scrapy框架源碼進(jìn)行深入剖析
發(fā)表于 11-21 14:54
Python解釋器的基本結(jié)構(gòu)
供足夠的上下文來(lái)進(jìn)一步研究它。我們的目標(biāo)并不是解釋所有關(guān)于解釋器的知識(shí)——就像編程和計(jì)算機(jī)科學(xué)中許多有趣的領(lǐng)域一樣,您可以花費(fèi)數(shù)年時(shí)間來(lái)深入理解這個(gè)主題。Byterun它的結(jié)構(gòu)類似于Python的主要實(shí)...
發(fā)表于 09-16 06:42
Python編程實(shí)用指南
Python 是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言。通過(guò) Python 編程,我們能夠解決現(xiàn)實(shí)生活中的很多任務(wù)。本書是一本面向?qū)嵺`的 Python 編程實(shí)用指南。本書的目的,不僅是
發(fā)表于 09-27 06:21
深入Python3中文版PDF電子書免費(fèi)下載
如果使用的是托管服務(wù)器上的帳號(hào), ISP[互聯(lián)網(wǎng)供應(yīng)商] 可能已經(jīng)安裝了 Python 3 。如果是在家運(yùn)行的 Linux ,也可能已經(jīng)安裝了 Python 3 。多數(shù)流行的 GNU/Linux
發(fā)表于 06-10 08:00
?0次下載
python的優(yōu)缺點(diǎn)有哪些
Python的定位是“優(yōu)雅”、“明確”、“簡(jiǎn)單”,所以Python程序看上去總是簡(jiǎn)單易懂,初學(xué)者學(xué)Python,不但入門容易,而且將來(lái)深入下去,可以勝任那些非常非常復(fù)雜的應(yīng)用程序開發(fā)。
精通Python的深入學(xué)習(xí)資料
精通Python的深入學(xué)習(xí)資料:從多方面來(lái)了解Python的特性和用法。
發(fā)表于 07-07 15:08
?42次下載
深入探討Python 的簡(jiǎn)要?dú)v史和優(yōu)點(diǎn)
Scarlett 指出,作為一種通用語(yǔ)言,Python 可以用于各種應(yīng)用程序,“簡(jiǎn)單易用” 的特點(diǎn)也使得它成為用于自動(dòng)化任務(wù)、構(gòu)建網(wǎng)站或軟件和分析數(shù)據(jù)的不錯(cuò)的選擇。
發(fā)表于 03-15 11:38
?517次閱讀
python寫完程序之后怎么運(yùn)行
對(duì)Python程序的執(zhí)行流程有更深入的了解。 一、Python程序的基本結(jié)構(gòu) Python程序是由一系列的語(yǔ)句構(gòu)成,語(yǔ)句是指一行代碼或多行代碼組成的指令集合。一個(gè)
使用Python進(jìn)行自然語(yǔ)言處理
在探討使用Python進(jìn)行自然語(yǔ)言處理(NLP)的廣闊領(lǐng)域時(shí),我們首先需要理解NLP的基本概念、其重要性、Python在NLP中的優(yōu)勢(shì),以及如何通過(guò)Python實(shí)現(xiàn)一些基礎(chǔ)的NLP任務(wù)。本文將從這些方面展開,并
Python在AI中的應(yīng)用實(shí)例
Python在人工智能(AI)領(lǐng)域的應(yīng)用極為廣泛且深入,從基礎(chǔ)的數(shù)據(jù)處理、模型訓(xùn)練到高級(jí)的應(yīng)用部署,Python都扮演著至關(guān)重要的角色。以下將詳細(xì)探討Python在AI中的幾個(gè)關(guān)鍵應(yīng)用
python的深入使用
評(píng)論