python中<list>和<list>
2019-01-07 本文已影响26人
adonis_stan
word = ['123', 'abc', 'abcdefg']
print(id(word))
print(id(word[0]))
#print(word)
#for w in word:
for w in word[:]:
print(id(w))
if len(w) > 6:
word.insert(0, 'abcdefg')
# word[:].insert(0, 'abcdefg')
print(id(word))
print(id(word[0]))
print(id(word[1]))
print(id(word[:]))
#print(word)
运行结果为:
2200539985928
2200540187144
2200540187144
2200530606992
2200540187200
2200539985928
2200540187200
2200540187144
2200539986184
会发现 word[:] 其实是 word 的深拷贝,即 word[:] 和 word 是独立的两个列表变量,对 word 的增删改不会影响 word[:],对 word[:] 的增删改也不会影响到 word。
python 中,有这样一个情况:
a = [1, 2, 3]
b1 = a
b2 = a[:]
print(a)
print(id(a))
print(b1)
print(id(b1))
print(b2)
print(id(b2))
"""
运行结果:
[1, 2, 3]
2716794825544
[1, 2, 3]
2716794825544
[1, 2, 3]
2716794825608
"""
"""
b1是a的浅拷贝,即b1和a一样
b2是a的深拷贝,即b2和a不一样
b1和b2的内容和a都是一样的,
但是b1的内存地址和a一样,b2的内存地址和a是不一样的
此处的这个就像按引用传递(b1)和按值传递(b2)
"""
联系方式:
QQ:1583801169