第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

不可變類型與可變類型

不可變類型與可變類型

縹緲止盈 2019-06-03 13:31:53
不可變類型與可變類型我搞不懂什么是不變的類型。我知道float對(duì)象被認(rèn)為是不可變的,使用我的書(shū)中的這種類型的示例:class RoundFloat(float):     def __new__(cls, val):         return float.__new__(cls, round(val, 2))由于類的結(jié)構(gòu)/層次結(jié)構(gòu),這是否被認(rèn)為是不可變的?float位于類的頂端,并且是它自己的方法調(diào)用。類似于這類例子(盡管我的書(shū)說(shuō)dict是可變的):class SortedKeyDict(dict):     def __new__(cls, val):         return dict.__new__(cls, val.clear())而在類中有一些可變的方法,使用這種類型的示例:class SortedKeyDict_a(dict):     def example(self):         return self.keys()還有,最后一次class(SortedKeyDict_a),如果我將這種設(shè)置傳遞給它:d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))而不調(diào)用example方法,則返回一個(gè)字典。這個(gè)SortedKeyDict帶著__new__將其標(biāo)記為錯(cuò)誤。我嘗試將整數(shù)傳遞給RoundFloat類__new__它沒(méi)有標(biāo)記錯(cuò)誤。
查看完整描述

3 回答

?
MMTTMM

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊

什么?浮標(biāo)是不變的?但我不能


x = 5.0

x += 7.0

print x # 12.0

那不是“啞巴”x嗎?


你同意字符串是不可變的,對(duì)吧?但你也可以做同樣的事。


s = 'foo'

s += 'bar'

print s # foobar

變量的值會(huì)發(fā)生變化,但它會(huì)通過(guò)更改變量引用的內(nèi)容而改變??勺冾愋涂梢赃@種方式改變,而且它可以。也改變“就位”。


這就是不同之處。


x = something # immutable type

print x

func(x)

print x # prints the same thing


x = something # mutable type

print x

func(x)

print x # might print something different


x = something # immutable type

y = x

print x

# some statement that operates on y

print x # prints the same thing


x = something # mutable type

y = x

print x

# some statement that operates on y

print x # might print something different

具體實(shí)例


x = 'foo'

y = x

print x # foo

y += 'bar'

print x # foo


x = [1, 2, 3]

y = x

print x # [1, 2, 3]

y += [3, 2, 1]

print x # [1, 2, 3, 3, 2, 1]


def func(val):

    val += 'bar'


x = 'foo'

print x # foo

func(x)

print x # foo


def func(val):

    val += [3, 2, 1]


x = [1, 2, 3]

print x # [1, 2, 3]

func(x)

print x # [1, 2, 3, 3, 2, 1]


查看完整回答
反對(duì) 回復(fù) 2019-06-03
?
慕的地6264312

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊

您必須理解Python將其所有數(shù)據(jù)表示為對(duì)象。其中一些對(duì)象(如列表和字典)是可變的,這意味著您可以在不更改其身份的情況下更改它們的內(nèi)容。其他對(duì)象,如整數(shù)、浮點(diǎn)數(shù)、字符串和元組都是不可更改的對(duì)象。了解這一點(diǎn)的一個(gè)簡(jiǎn)單方法是查看對(duì)象ID。

下面是一個(gè)不可變的字符串。你不能改變它的內(nèi)容。它會(huì)引發(fā)一個(gè)TypeError如果你想改變它。另外,如果我們分配新的內(nèi)容,就會(huì)創(chuàng)建一個(gè)新的對(duì)象,而不是修改的內(nèi)容。

>>> s = "abc">>>id(s)4702124>>> s[0] 'a'>>> s[0] = "o"Traceback (most recent call last):
  File "<stdin>", line 1, in <module>TypeError: 'str' object does not support item assignment
  >>> s = "xyz">>>id(s)4800100>>> s += "uvw">>>id(s)4800500

您可以使用列表來(lái)完成此操作,并且它不會(huì)更改對(duì)象標(biāo)識(shí)。

>>> i = [1,2,3]>>>id(i)2146718700>>> i[0] 1>>> i[0] = 7>>> id(i)2146718700

要閱讀有關(guān)Python數(shù)據(jù)模型的更多信息,您可以查看Python語(yǔ)言引用:


查看完整回答
反對(duì) 回復(fù) 2019-06-03
?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊

常見(jiàn)的不可變類型:

  1. 數(shù)字:

    int()float()complex()

  2. 不可變序列:

    str()tuple()frozenset()bytes()

常見(jiàn)的可變類型(幾乎所有其他類型):

  1. 可變序列:

    list()bytearray()

  2. 設(shè)置類型:

    set()

  3. 制圖類型:

    dict()

  4. 類,類實(shí)例
  5. 等。

快速測(cè)試類型是否可變的一個(gè)技巧是使用id()內(nèi)置功能。

示例,在整數(shù)上使用,

>>> i = 1>>> id(i)***704>>> i += 1>>> i2>>> id(i)***736 (different from ***704)

在名單上使用,

>>> a = [1]>>> id(a)***416>>> a.append(2)>>> a[1, 2]>>> id(a)***416 (same with the above id)


查看完整回答
反對(duì) 回復(fù) 2019-06-03
  • 3 回答
  • 0 關(guān)注
  • 663 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)