python变量相关问题记录

一个变量名的空间中存储了哪些元素?
 包含变量名,对象指针,???


变量值的地址空间中有哪些元素?
包含值,值的属性????



通过一个PyObject结构体的指针,就能找到这个对象的一切信息:引用计数、长度、类型对象。比如通过PyIntObject结构的ob_type指针,就能找到对Python的整数对象的类型对象,这个类型对象里,能找到做加法、减法、乘法、除法、构造、销毁…… 等跟Python整数对象有关的所有函数。这样,一个Python的『对象』可以简单的通过一个PyObject结构体的指针作为它的唯一标识


『俩变量的对象相同』就是『一个对象的PyObject指针,与两个变量名绑定了』


Python中的变量、引用、拷贝和作用域


a = [1,2,3]
b  = [a] * 3
b = [[1,2,3],[1,2,3],[1,2,3]]
c = a
id(a)和id(d)的内存地址相同139899674081112 这个可以说明是id的地址是变量值的地址,
id(b)的内存地址不同, 但id(b)的值 不一样,这又怎么理解呢,  b只是存储了三份a,那这个id是怎么处理的???  这个id不是真实的内存地址空间值,是通过值的内存地址和变量名引用的值 哈希出来的???






e = ['a'] 这应该存储在一个列表空间中,因为是可变类型
f = e * 3 这里涉及到   剩是怎么运算的
f = ['a','a','a'] 这个又是怎么理解的。。。   应该不是引用e 值的地址,是新创建了值的空间


浅拷贝,深拷贝又是怎么理解的
import copy
a = [[1, 2, 3], [4, 5, 6]]
b = a #b直接指向a的值空间地址,没有创建新值的地址空间
c = copy.copy(a) #c 拷贝a值地址空间,会创建新值的地址空间
d = copy.deepcopy(a) #d 创建a值地址空间所最终指向的值,如果地址空间是引用地址,就会一直找到最终的值,并创建相同的值。会创建新的地址空间
a.append(15)
a[1][2] = 10 
print a
print b
print c
print d
# [[1, 2, 3], [4, 5, 10], 15] 这个15是存储在哪里,这个又是怎么理解
# [[1, 2, 3], [4, 5, 10], 15]
# [[1, 2, 3], [4, 5, 10]]
# [[1, 2, 3], [4, 5, 6]]


对于复杂的数据结构中的赋值和计算
a = [1,2,3]
b  = [a] * 4
b = [[1,2,3],[1,2,3],[1,2,3],[1,2,3]]
我理解是这样,
  python变量相关问题记录_第1张图片


b.append(1)  这样也就可以理解了,上面的那个15的也可以理解

python变量相关问题记录_第2张图片


但这都是我现在的理解,还没有看到哪里有这个说明。

网上和书上看到的都不大一样。。。所以这个还不确认。

如果后面重新对a赋值,比如a = [[1,2,3],3] 这可应该会重新开辟值的地址空间,在新值地址空间内是先创建[1,2,3],再创建3,还是直接引用外部已经有的[1,2,3],再创建3呢???

对于复杂和简单的数据结构,地址空间内可不可以存在真实的列表或是字符,,,还是说列表或是字符所有的数据结构的值完全是外面的引用???


欢迎有在学习python的一起讨论,或是明白的同学指正。。。


参考:

http://xianglong.me/article/python-variable-quote-copy-and-scope/

你可能感兴趣的:(python,变量)