Pythonにおける可変型の小実験について
Pythonにおける可変型の小実験について
最近pythonの可変(immutable)タイプについて、int、float、string、tupleはいずれも可変タイプであるという問題を見ました.私の最初の理解は、pythonの可変タイプは、同じ値が同じオブジェクトで、異なる値が異なるオブジェクトで、変数値が変わると元のオブジェクトを指さないことです.事実は、この理解が理想化され、実際の状況と合わないことを証明している.
最初の小さな実験では問題は見られませんでした
2番目の小さな実験で現れた状況は、冒頭の見方をさらに固めた.
3つ目は多くの事故が発生しました
ある条件下でstringタイプが+=後idで変わらないことを試した人がいる.(https://web.eecs.utk.edu/~azh/blog/pythonstringsaremutable.html)
暫定的な結論はintが先頭の理解に最も近く,float,stringは初期値の場所でのみ成立する.tupleが修正してはいけない「可変」になるまで待つ.
最近pythonの可変(immutable)タイプについて、int、float、string、tupleはいずれも可変タイプであるという問題を見ました.私の最初の理解は、pythonの可変タイプは、同じ値が同じオブジェクトで、異なる値が異なるオブジェクトで、変数値が変わると元のオブジェクトを指さないことです.事実は、この理解が理想化され、実際の状況と合わないことを証明している.
最初の小さな実験では問題は見られませんでした
x = y = 1
x = 2
print(x,y,id(x),id(y))#
y = 2
print(x,y,id(x),id(y))#
# python , 1, 2, , 2
x = y = [1]
x[0] = 2
print(x,y,id(x),id(y))# , , x、y
x = [1]
y = [1]
print(x,y,id(x),id(y))# , ,
# list ,
2番目の小さな実験で現れた状況は、冒頭の見方をさらに固めた.
def foo(x):
print('id(x)=',id(x))# x a , , ,
x += 5
print('id(x`)=',id(x))# x ,
x -= 1
print('id(x``)=',id(x))#
# x 82,y x`
return x
a = 77
print('id(a)=',id(a))
y = foo(a)
print('a=',a,',y=',y)
print('id(y)=',id(y))
3つ目は多くの事故が発生しました
a = "asdf"
b = "ghjk"
c = "asdf"
print('id(a)=',id(a),'id(b)=',id(b),'id(c)=',id(c))
#a、c
a = 2.0
b = 2.001
c = a + 0.001
d = 2.001
print(a,'id(a)=',id(a),b,'id(b)=',id(b),c,'id(c)=',id(c),d,'id(d)=',id(d))
#b、d , c , b、c、d ,
a = (1,2)
b = (1,2)
r = 2
c =(1,r)
print(a,'id(a)=',id(a),b,'id(b)=',id(b),c,'id(c)',id(c))
# , , tuple “ ” 。
a = (1,2)
print(a,'id(a)=',id(a))
#a
a = "asdf"
b = "asd"
print(a,b,'id(a)=',id(a),'id(b)=',id(b))
b += 'f'
print(a,b,'id(a)=',id(a),'id(b)=',id(b))# a、b ,
# , b a , ,
#b "asd"、"asdf" , , list
c = "apple"
f = "maple"
print(c,id(c))
d = c.replace('f','t')
e = c.replace('ap','ma')
print(d,id(d),e,id(e),f,id(f))#c、d ,
# ,apple ,maple , maple ,d
ある条件下でstringタイプが+=後idで変わらないことを試した人がいる.(https://web.eecs.utk.edu/~azh/blog/pythonstringsaremutable.html)
暫定的な結論はintが先頭の理解に最も近く,float,stringは初期値の場所でのみ成立する.tupleが修正してはいけない「可変」になるまで待つ.