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...