从截图例子中会有如下疑问:
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 即通过浅拷贝和深拷贝复制个副本,从而达到不互相影响的目的。
网友评论