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等)不需要开辟新的空间