测试Inbox百人计划

Python之引用

2017-04-05  本文已影响11人  五娃儿

从截图例子中会有如下疑问:

1、为何字符串赋值,改变值时,change的值未被改变?

答:因为将42赋值给test变量后,拷贝test中的值,将其赋值给变量change,所以即使test的值发生了变化,但是也不会影响change

2、为何列表在赋值,改变值时,test和change的列表值都发生了变化?

答:将列表复制给一个变量时,实际是将列表的“引用”赋值给了变量,简单来说就是test 和change两个列表实际指的是同一个列表

总结:在python中,对于不可改变的数据类型的值,如字符串整型、或者元祖,python变量保存的是值本身。

在python中,当党鞭必须保存可变量数据类型的值时,例如列表、字典,python变量使用的是引用


思考下为何如下例子的spam的值也被改变了?

 

将列表[1,2,3]赋值给变量spam 即spam = [1,2,3]

调用eggs函数,将spam的值复制给变元someParamerer(此处实际是将spam的引用传递给了变元somParamerer)

执行函数体,即列表增加hello元素,结果为 [1, 2, 3, 'Hello']

打印spam的值 [1, 2, 3, 'Hello']

原因就是,spam 和someParamerer指向的是同一个列表,所以spam的值也是[1, 2, 3, 'Hello']

友情提示:这一块一定要清楚什么时候是用的值,什么时候是引用,否则后面学习时很容易困惑。

如果不想改变列表或者字典的值要如何处理?

使用copy模块的copy 和deepcopy 即通过浅拷贝和深拷贝复制个副本,从而达到不互相影响的目的。

上一篇 下一篇

猜你喜欢

热点阅读