kinila 发表于 2017-4-30 11:16:40

内存、绑定-python tips -by小雨

  本文纯属个人见解,是对前面学习的总结,如有描述不正确的地方还请高手指正~
  且看如下例子:

>>> l = ]
>>> ll = l
>>> ll.remove(1)
>>> l
[2, 3]
>>>
>>> l = ]
>>> ll = l[:]
>>> ll.remove(1)
>>> l
[1, 2, 3]
>>>

  是否是有点大吃一惊,跟c 语言怎么不一样呢?!

>>>a =
>>>b = a
>>>b = 2
>>>a


  列表是可变象对型类,因此传递的时候,量变名b绑定的内存地址与a绑定的内存地址是统一地址。

>>> x = 1
>>> y = 1
>>> x is y
True
>>>

  数值为不可变型类,x与y指向的是数值为1的统一内存地址。
  
  对于类说来也是如此:

class b:
x = []
def set(self):
self.x.append(1)
def get(self):
return self.x
for i in range(3):
a = b()
print b.__dict__
a.set()
print a.get()

  结果:

{'x': [], '__module__': '__main__', 'set': <function set at 0x7f89a319bcf8>, '__doc__': None, 'get': <function get at 0x7f89a319bd70>}

{'x': , '__module__': '__main__', 'set': <function set at 0x7f89a319bcf8>, '__doc__': None, 'get': <function get at 0x7f89a319bd70>}

{'x': , '__module__': '__main__', 'set': <function set at 0x7f89a319bcf8>, '__doc__': None, 'get': <function get at 0x7f89a319bd70>}

 


  python中,万物皆象对。python中不存在所谓的传值用调,一切传递的都是象对的引用,也可以认为是传址。
  python中,象对分为可变(mutable)和不可变(immutable)两种型类。
  元组(tuple)、数值型(number)、字符串(string)均为不可变象对,而字典范(dictionary)和列表型(list)的象对是可变象对。

>>>a = 1 #将名字a与内存中值为1的内存绑定在一起
>>>a = 2 #将名字a与内存中值为2的内存绑定在一起,而不是修改来原a绑定的内存中的值,这时,内存中值为1的内存地址引用计数-1,当引用计数为0时,内存地址被回收
>>>b = a #量变b执行与a绑定的内存
>>>b = 3 #创立一个内存值为3的内存地址与量变名字b行进绑定。这是a还是指向值为2的内存地址。
>>>a,b
>>>(2,3)

  python数函参数的默认值与此的关系及例子,详见 python tips - 意注 python 数函参数的默认值:http://www.cnblogs.com/congbo/archive/2012/11/29/2794413.html
  考参:
  http://thomaschen2011.iteye.com/blog/1441254
  http://www.cnblogs.com/evening/archive/2012/04/11/2442788.html
  文章结束给大家分享下程序员的一些笑话语录: 乔布斯:怎么样还是咱安全吧!黑客:你的浏览器支持国内网银吗?苹果可以玩国内的网游吗乔布斯:......不可以黑客:那我研究你的漏洞干嘛,我也需要买奶粉!
页: [1]
查看完整版本: 内存、绑定-python tips -by小雨