b=a与b=a[:]的区别
b=a将两者指向同一个对象
b=a[:]会创建一个新的与a完全相同的对象,但是与a并不指向同一对象。
在计算机中,不同的对象即不同的内存地址。
可理解为:b=a将创建a与b两个快捷方式并指向同一文件;
而b=a[:]先将a指向的文件复制一份作为副本,然后创建一个指向该副本的快捷方式b。
二者不同表现为当两者指向同一对象时,改变其中任意一个,都会改变对象的值,也就是同时改变a,b的值。
b=a
In [116]: a=[1, 2, 3]
In [117]: b=a
In [118]: a,b
Out[118]: ([1, 2, 3], [1, 2, 3])
In [119]: id(a)
Out[119]: 2699906448904
In [120]: id(b)
Out[120]: 2699906448904
In [121]: b.append(4)
In [122]: a,b
Out[122]: ([1, 2, 3, 4], [1, 2, 3, 4])
In [123]: id(a)
Out[123]: 2699906448904
In [124]: id(b)
Out[124]: 2699906448904
In [125]:
b=a[:]
In [129]: c=[1, 2, 3]
In [130]: d=c[:]
In [131]: id(c)
Out[131]: 2699908230216
In [132]: id(d)
Out[132]: 2699906435272
In [133]: c,d
Out[133]: ([1, 2, 3], [1, 2, 3])
In [134]: d.append(4)
In [135]: c,d
Out[135]: ([1, 2, 3], [1, 2, 3, 4])
In [136]: id(c)
Out[136]: 2699908230216
In [137]: id(d)
Out[137]: 2699906435272
In [138]: