s1 = '你好'
s2 = s1
print(id(s1))
print(id(s2))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2118051305672
2118051305672
變量之間賦值相當於C++引用
a = ['c1', 'c2']
for b in a:
print(id(b))
b = 'bian'
print('a[0]', id(a[0]))
print('a[1]', id(a[1]))
print(a)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2532258695856
2532258696248
a[0] 2532258695856
a[1] 2532258696248
['c1', 'c2']
遍歷對象時,b指向的是a中的元素而不是複製出來的新對象。這裏b仍然相當於C++中的引用
但是此處無法通過修改b的值來改變a的內容,爲啥呢?因爲裏面存的是常量啊。。。。。
c1 = [1]
c2 = ["feng"]
a = [c1, c2]
for b in a:
print(id(b))
b.append(1)
print('a[0]', id(a[0]))
print('a[1]', id(a[1]))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2400425028040
2400425027848
a[0] 2400425028040
a[1] 2400425027848
[[1, 1], ['feng', 1]]
當a中的元素爲變量時就可以修改了
總結:
- 賦值是將一個對象的地址賦值給一個變量,讓變量指向該地址( 舊瓶裝舊酒 )。
- 修改不可變對象(str、tuple)需要開闢新的空間
- 修改可變對象(list等)不需要開闢新的空間