


Python培训
400-996-5531
在Python中创建一个变量并赋值(例a=3)相当于是变量对一个对象的引用,一旦变量被引用,Python会自动跟随这个变量到这个对象的连接;共享引用呢,就是多个变量引用了同一个对象。
a = "例子"
b = a #a,b都引用了“例子”这一对象a = "example"a,b
这段代码中,a先引用了"例子"这个对象,然后b也引用了“例子”这个对象,共享了同一变量;之后a被赋予了"example“这个新的对象,打印a,b,结果是('example','例子');
所以对于列表、字典这些在原处支持修改的对象,在共享引用的时候要小心一个变量的修改会影响到其它的变量。
L1 = [1,2,3]
L2 = L1
L[0] = 1111
L1,L2
L1的改变是否会影响L2的值?答案是会。打印出来L1,L2的值都是[1111,2,3];
因为L1和L2都引用了同一个对象,即同一块内存空间,而列表对象又支持原处修改,所以L1的修改就导致了共同引用空间的修改,所以引用了这块区域的变量的值都会随之改变;
如果不想这种情况发生,要拷贝对象而不是创建对象的引用,例如上述L2列表可以利用分片拷贝L1而不是共享L1的对象,这样L1的改变不会影响L2的值:
L1 = [1,2,3]
L2 = L1[:]
L1[0] = 1111
L1,L2
当然字典不能用分片技术来拷贝,应该使用X.copy()方法来调用。
本文内容转载自网络,本着分享与传播的原则,版权归原作者所有,如有侵权请联系我们进行删除!
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有