首先,我们需要知道在python中哪些是可变数据类型,哪些是不可变数据类型。可变数据类型:列表list和字典dict;不可变数据类型:整型int、浮点型float、字符串型string和元组tuple。

用一句话来概括上述过程就是:“python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

不可变数据类型代码示例:

 a = 1
b = 1 def func():
c = 1
print(id(c)) func()
print(id(a)," ",id(b))
#打印的三个id 都是一样的 b = 3
print(id(b)) #当b的值改变后,id值就改变了

可变数据类型代码示例:

 a = [1,2,3]
print(id(a)) a.append(5)
print(id(a)) #修改列表后打印的值还是一眼的

对于全局可变数据类型,函数内部是直接可以修改和查看的:

 a = [1,2,3,4,5]

 def func():
a[3] = 8 #对于可变数据类型,可以在函数内部直接修改 func()
print(a)

对于不可变数据类型,在函数内部只能查看不能直接修改,如果要修改,需要借助于 global 声明:

示例1:

 a = 1
def func():
print(a) #可以查看
a += 1 #但是不能直接修改外部全局变量 这一句报错
func()

示例2:(修改示例1)

 a = 1
def func():
global a
print(a)
a += 1
func()
print(a) #a 的值已经被改变

最新文章

  1. Spark学习(三) -- SparkContext初始化
  2. range()和xrange()
  3. 解析导航栏的url--selnium,beautifulsoup实战
  4. [Oracle] SQL*Loader 详细使用教程(1)- 总览
  5. IOS中的网络编程
  6. HTML5自学笔记[ 4 ]js中新增的选择器方法
  7. Oracle 生成随机密码
  8. crm2011js操作IFRAME和选项集
  9. p2p 打洞技术
  10. Java 8 异常该进
  11. websocket --- 05 . http与websocket
  12. projective dynamics的global solve中 引入拉格朗日乘子的简化方法
  13. [CF1107E]Vasya and Binary String【区间DP】
  14. Spring 学习——Spring IOC概念
  15. 第一章 Java Web工作原理
  16. drawImage
  17. Hibernate中一级缓存和二级缓存
  18. m3u8 player
  19. ajax基本常识及get请求方式
  20. mysql 里的 ibdata1 文件不断的增长

热门文章

  1. Word 启动模板文件
  2. python filter&sorted
  3. 稳定sqlplan方法
  4. July 19th 2017 Week 29th Wednesday
  5. July 03rd 2017 Week 27th Monday
  6. 如何在SAP C4C里使用ABSL消费第三方Restful API
  7. SAP Cloud for Customer里Sales Order和Sales Quote的建模方式
  8. RabbitMQ的事件总线
  9. HTML和CSS实现常见的布局
  10. BZOJ3245:最快路线(最短路)