day16

python中所有的數(shù)據(jù)類型都是诽凌,數(shù)據(jù)都是對(duì)象。

所有的運(yùn)算符對(duì)應(yīng)的操作坦敌,本質(zhì)都是在調(diào)用數(shù)據(jù)類型對(duì)應(yīng)的魔法方法侣诵。(每個(gè)運(yùn)算符都對(duì)應(yīng)一個(gè)固定的魔法方法)



class Student(object):
    def __init__(self, name, age=0, score=0):
        self.name = name
        self.age = age
        self.score = score

    def __repr__(self):
        return str(self.__dict__)
# 重載加法預(yù)算符
    # self +  other = return 返回值
    def __add__(self, other):
        return self.age + other.age
# 重載乘法運(yùn)算符
    def __mul__(self, other):
        return self.score * other
# >
    def __gt__(self, other):
        return self.score > other.score
# <

# def __lt__(self, other):
#     return self.score < other.score

# 注意: >和<只需要重載一個(gè)

stu1 = Student('小明', 18, 60)
stu2 = Student('小花', 22, 80)

print(stu1 + stu2)
print(stu1 * 10)
print(stu1 > stu2)
print(stu1 < stu2)


all_students = [stu1, stu2, Student('小小', 17, 55), Student('xiaohong', 25, 70)]
all_students.sort()
print(all_students)

練習(xí): 讓Student的對(duì)象支持乘法運(yùn)算,運(yùn)算規(guī)則是:

<name: 張三, age:10, score:0> * 3 = [<name: 張三, age:10, score:0> , <name: 張三, age:10, score:0> , <name: 張三, age:10, score:0> ]

import copy

class Dog:
    def __init__(self, name, color='黃色'):
        self.name = name
        self.color = color


class Student:
    def __init__(self, name, age=0, score=0):
        self.name = name
        self.age = age
        self.score = score
        self.dog = None

    def __repr__(self):
        return '<'+str(self.__dict__)[1:-1]+'>'

    # *
    def __mul__(self, other):
        # self = stu1, other = 2
        result = []
        for _ in range(other):
            result.append(self)
        return result


stu1 = Student('張三', 18, 90)
print(stu1)

result = stu1 * 2
print(result)

stu1.name = '小明'
print(result)

result[0].name = '小花'
print(stu1, result)

print('=====================深拷貝和淺拷貝====================')
print('======直接賦值=====')

1.一個(gè)變量直接給另外一個(gè)變量賦值:直接將地址賦值狱窘,賦完后兩個(gè)變量指向同一塊內(nèi)存區(qū)域杜顺,并且相互影響

stu2 = Student('Lisa', 18, 60)
stu3 = stu2
print(id(stu3), id(stu2))
stu2.age = 28
print(stu3)

2.淺拷貝和深拷貝(面試點(diǎn)!)

拷貝原理: 將被拷貝的對(duì)象復(fù)制一份蘸炸,產(chǎn)生一個(gè)新的數(shù)據(jù)躬络,然后將新的數(shù)據(jù)的地址返回

a.淺拷貝

  1. 列表或字典的copy方法是淺拷貝、切片也是淺拷貝
  2. copy.copy(對(duì)象) - 復(fù)制指定的對(duì)象搭儒,產(chǎn)生一個(gè)新的對(duì)象(不會(huì)復(fù)制子對(duì)象)

b.深拷貝
copy.deepcopy(對(duì)象) - 復(fù)制指定的對(duì)象穷当,產(chǎn)生一個(gè)新的對(duì)象。如果這個(gè)對(duì)象中有其他的對(duì)象仗嗦,子對(duì)象也會(huì)被復(fù)制
"""
print('======淺拷貝=====')

dog1 = Dog('財(cái)財(cái)')
stu2 = Student('Lisa', 18, 60)
stu2.dog = dog1

stu4 = copy.copy(stu2)

print('stu4:', stu4)
stu2.name = '小花'
print(stu2, stu4)


print('======深拷貝=====')
dog1 = Dog('財(cái)財(cái)')
stu2 = Student('Lisa', 18, 60)
stu2.dog = dog1

stu4 = copy.deepcopy(stu2)

print('stu4:', stu4)
stu2.name = '小花'
from sys import getrefcount

1.數(shù)據(jù)的存儲(chǔ)(內(nèi)存開辟)

python的變量都存儲(chǔ)在棧區(qū)間膘滨,對(duì)象都在堆區(qū)間。

聲明變量或者給變量賦值稀拐,是先在內(nèi)存(堆)中開辟存儲(chǔ)數(shù)據(jù)火邓,然后將數(shù)據(jù)地址保存在變量中。
但是數(shù)字和字符串特殊德撬,如果是用數(shù)字或者字符串給變量賦值铲咨,不會(huì)直接開辟空間保存數(shù)據(jù),
而是先在內(nèi)存檢測(cè)這個(gè)數(shù)據(jù)之前是否已經(jīng)存儲(chǔ)過(guò)蜓洪,如果已經(jīng)存儲(chǔ)直接用上次保存的數(shù)據(jù)纤勒,沒(méi)有存儲(chǔ)才會(huì)開辟新的空間保存數(shù)據(jù)

2. 內(nèi)存的釋放

1)引用計(jì)數(shù)
python每個(gè)對(duì)象都有一個(gè)屬性叫引用計(jì)數(shù),用來(lái)保存當(dāng)前對(duì)象的引用的個(gè)數(shù)隆檀。

python中的垃圾回收機(jī)制來(lái)判斷一個(gè)對(duì)象是否銷毀摇天,就看這個(gè)對(duì)象的引用計(jì)數(shù)是否為零,如果為零就會(huì)被銷毀恐仑。


list1 = [1, 2]
list2 = [1, 2]
print(id(list1), id(list2))

num1 = 10
num2 = 10
print(id(num1), id(num2))


class Student:
    def __init__(self):
        self.name = '張三'

print('==============引用計(jì)數(shù)===========')

list1 = [1, 2]
print(getrefcount(list1))

# def yt_getrefcount(obj):
#     # obj = list1
#     return 獲取obj對(duì)應(yīng)的數(shù)據(jù)的引用個(gè)數(shù)

# yt_getrefcount(list1)

# 讓引用計(jì)數(shù)增加
list2 = list1
print(getrefcount(list1))
dict1 = {'a': list2}
print(getrefcount(list1))

#
# num = 100
# print(getrefcount(num))
# num1 = 100
# print(getrefcount(num))

# 讓引用計(jì)數(shù)減少
print(getrefcount(list1))
list2 = 100
print(getrefcount(list1))
del dict1['a']
print(getrefcount(list1))
del list1
# print(getrefcount(list1))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泉坐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子裳仆,更是在濱河造成了極大的恐慌腕让,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件歧斟,死亡現(xiàn)場(chǎng)離奇詭異纯丸,居然都是意外死亡偏形,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門觉鼻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)俊扭,“玉大人,你說(shuō)我怎么就攤上這事滑凉⊥嘲猓” “怎么了?”我有些...
    開封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵畅姊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吹由,道長(zhǎng)若未,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任倾鲫,我火速辦了婚禮粗合,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乌昔。我一直安慰自己隙疚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開白布磕道。 她就那樣靜靜地躺著供屉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溺蕉。 梳的紋絲不亂的頭發(fā)上伶丐,一...
    開封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音疯特,去河邊找鬼哗魂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛漓雅,可吹牛的內(nèi)容都是我干的录别。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼邻吞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼组题!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起吃衅,我...
    開封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤往踢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后徘层,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峻呕,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡利职,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瘦癌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猪贪。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖讯私,靈堂內(nèi)的尸體忽然破棺而出热押,到底是詐尸還是另有隱情,我是刑警寧澤斤寇,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布桶癣,位于F島的核電站,受9級(jí)特大地震影響娘锁,放射性物質(zhì)發(fā)生泄漏牙寞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一莫秆、第九天 我趴在偏房一處隱蔽的房頂上張望间雀。 院中可真熱鬧,春花似錦镊屎、人聲如沸惹挟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)连锯。三九已至,卻和暖如春党巾,著一層夾襖步出監(jiān)牢的瞬間萎庭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工齿拂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驳规,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓署海,卻偏偏與公主長(zhǎng)得像吗购,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砸狞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 私有化 .屬性和方法訪問(wèn)權(quán)限私有的:在類的外部不可以被使用捻勉,,也不可以被繼承保護(hù)的:在類的外部不可以被使用刀森,也可以...
    ChiAo1fei閱讀 246評(píng)論 0 0
  • 前言回顧 1.私有化: 命名的時(shí)候兩個(gè)下劃線開頭 2.getter和settergetter - 想要[獲取]...
    不語(yǔ)sun閱讀 253評(píng)論 0 0
  • 1 運(yùn)算符的重載 python中所有的數(shù)據(jù)類型都是類踱启,數(shù)據(jù)都是對(duì)象。 所有的運(yùn)算符對(duì)應(yīng)的操作,本質(zhì)都是在調(diào)用數(shù)據(jù)類...
    咔佈閱讀 221評(píng)論 0 0
  • 第一節(jié):運(yùn)算符的重載 python中所有的數(shù)據(jù)類型都是埠偿,數(shù)據(jù)都是對(duì)象透罢。所有的運(yùn)算符對(duì)應(yīng)的操作,本質(zhì)都是在調(diào)用數(shù)據(jù)類...
    覺(jué)醒_009f閱讀 223評(píng)論 0 0
  • 2019-05-07 1.運(yùn)算符重載 python中所有的數(shù)據(jù)類型都是冠蒋,數(shù)據(jù)都是對(duì)象羽圃。 所有的運(yùn)算符對(duì)應(yīng)的操作,本...
    快請(qǐng)輸入昵稱吧閱讀 152評(píng)論 0 0