找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 4778|回复: 5

[已解决] 关于Python给元组分配内存的问题

2

主题

4

帖子

4

积分

贫民

积分
4
blackclaw 发表于 2016-12-21 21:54:11 | 显示全部楼层 |阅读模式
想求助一个关于Python 3.5变量内存分配的问题.如下所示, str类型值一样,那么变量的内存地址也一样,这个比较好理解.

但是tuple类型,如果是个空元组, 那么a和b的地址是一样的, 如果是(1,2,3), a和b的地址就不一样了. 元组是不能改变的,那为何python会为两个相同值的元组分配不同的内存呢?

多谢指点

  1. >>> a = "hello"
  2. >>> b = "hello"
  3. >>> c = a
  4. >>> print(type(a), id(a), type(b), id(b), type(c), id(c))
  5. <class 'str'> 2897251552368 <class 'str'> 2897251552368 <class 'str'> 2897251552368

  6. >>> a = (1,2,3)
  7. >>> b = (1,2,3)
  8. >>> c = a
  9. >>> print(type(a), id(a), type(b), id(b), type(c), id(c))
  10. <class 'tuple'> 2897252172424 <class 'tuple'> 2897252172640 <class 'tuple'> 2897252172424
  11. >>>

  12. >>> a = ()
  13. >>> b = ()
  14. >>> c = a
  15. >>> print(type(a), id(a), type(b), id(b), type(c), id(c))
  16. <class 'tuple'> 2897204740168 <class 'tuple'> 2897204740168 <class 'tuple'> 2897204740168
  17. >>>
复制代码



回复

使用道具 举报

0

主题

27

帖子

27

积分

贫民

积分
27
maximal_ideal 发表于 2016-12-25 16:39:44 | 显示全部楼层
下面的话来自与tuple的介绍
tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。

我觉得可以吧tuple理解成const 指针数组吧,所以2个tuple不能像string 一样共享内存的
2个tuple 就要有两个不同的地址
回复 支持 1 反对 0

使用道具 举报

2

主题

4

帖子

4

积分

贫民

积分
4
blackclaw  楼主| 发表于 2016-12-26 10:06:47 | 显示全部楼层
多谢!  估计这是python内部定下的规则,所以记住就行了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
七月洪流 发表于 2017-4-27 19:04:56 | 显示全部楼层
blackclaw 发表于 2016-12-26 10:06
多谢!  估计这是python内部定下的规则,所以记住就行了

楼主,请问您现在清楚Python给元组分配内存的问题吗?能否讲一讲?谢谢~
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
七月洪流 发表于 2017-4-27 19:26:09 | 显示全部楼层
maximal_ideal 发表于 2016-12-25 16:39
下面的话来自与tuple的介绍
tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。

您好,请问一下,“tuple理解成const 指针数组吧”怎么理解呢?谢谢!
回复 支持 反对

使用道具 举报

0

主题

14

帖子

14

积分

贫民

积分
14
hades2013 发表于 2017-4-27 22:57:00 | 显示全部楼层
围观,学习中,,,
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表