Python 注意問題

2021-09-11 20:12:10 字數 1541 閱讀 5852

class parent:

x = 1

class child1(parent):

pass

class child2(parent):

pass

print(parent.x,child1.x,child2.x)

print(id(parent.x))

print(id(child1.x))

print(id(child2.x))

print()

child1.x = 2

print(parent.x,child1.x,child2.x)

print(id(parent.x))

print(id(child1.x))

print(id(child2.x))

parent.x = 3

print(parent.x,child1.x,child2.x)

print(id(parent.x))

print(id(child1.x))

print(id(child2.x))

輸出

1 1 1

9195680

9195680

9195680

1 2 1

9195680

9195712

9195680

3 2 3

9195744

9195712

9195744

如下程式示例中,

<1> par.x = 2 實際是將x指向了一塊新的記憶體

<2> par.y = 3 則是給物件par新增了乙個屬性,原始類parent並沒有變

class parent:

x = 1

par = parent()

print(parent.x, ' : ', id(parent.x))

print(par.x, ' : ', id(par.x), '\n')

par.x = 2

print(parent.x, ' : ', id(parent.x))

print(par.x, ' : ', id(par.x), '\n')

par.y = 3

print(parent.__dict__)

print(par.__dict__)

輸出:

1  :  9195680

1 : 9195680

1 : 9195680

2 : 9195712

相同點:用法相同。

不同點:range返回的是乙個列表,xrange返回的是乙個生成器。前者直接在記憶體中開闢一塊空間儲存列表,後者邊迴圈邊使用,只有使用時才會開闢記憶體空間,可以節省記憶體。

順便提一下列表推導式和生成器表示式的用法區別:列表推導式用方括號,生成器表示式用圓括號。

[1] python物件導向之類屬性和類方法的使用和例項

[2] python繼承關係中,類屬性的修改

注意python中的引用問題

一 比如 a 0 5 對第乙個list中的數字進行賦值。如下 a 0 1 5 列印則會出現以下情況 print a 5 5 5 5 5 原因是 a 0 5 只是對 0 進行了淺拷貝,也就是說 0 5拷貝的只是引用,所以對乙個賦值其他的引用也會相應的改變,於是出現上面的情況。nnd,弄了乙個多小時。二...

python各種問題及注意點總結

1引數解析的新增子命令import argparse 首先定義兩個不同的函式 def a x return x def b x return x parser argparse.argumentparser 獲得乙個主直譯器 subparser parser.add subparsers dest ...

python注意問題及解決方法

迴圈列表不要刪除東西 lis 11,22,33,44,55 for i in range len lis print i del lis i print lis 報錯,因為每次刪的元素都是一次刪除後下一次的列表,這會導致之後的列表無法索引 刪除奇數字 方法一 li lis 0 2 0可以省略 pri...