本文目录一览:
- 1、Python中的赋值,浅拷贝和深拷贝的区别
- 2、python 调用C代码获取数据,C代码要求1个结构参数, 其中有项目是指向缓冲区的指针,如何实现参数赋值?
- 3、Python变量赋值的秘密分享
- 4、python中的赋值
Python中的赋值,浅拷贝和深拷贝的区别
赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}
深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}
python 调用C代码获取数据,C代码要求1个结构参数, 其中有项目是指向缓冲区的指针,如何实现参数赋值?
class stdata(Structure):
_fields_ = [('pBuf', c_char_p), ('buflen', c_int)]
N=100
buf = create_string_buffer(N)
d = stdata()
d.buflen = N
d.pBuf = cast(buf, c_char_p)
n = CallMyCFunc_GetData(byref(d))
关键在于create_string_buffer创建可写buffer;cast转换为char*类型。
Python变量赋值的秘密分享
Python变量赋值的秘密分享
在Python中,我们令一个变量等于另外一个变量时,并不是把值传递给它,而是直接把指向的地址更改了。我们想要查看一个变量在内存中的地址,可以通过id(变量) 来查看。我们通过一个小例子来看看这个有趣的过程。
x = 12
y= 13
id(x)
id(y)
x = y
id(x)
id(y)
首先给x变量赋值为12,y变量赋值为13,我们用id(变量)分别查看x和y在内存中的位置。上面显示分别为1865402384和1865402416。然后我们令x = y后,再查看一下它们在内存中的位置,发现x 和 y都指向了1865402416。由此可见,在python中,我们赋值的方式和C语言有所不同,c语言直接更改x那块内存里面的值,而Python直接改变x的指向,这让我想起了指针。
我们接着尝试一下,继续在这里输入下面的代码
y = 12
id(y)
1865402384
天!发生了什么??y在内存中的地址又变成1865402384了,准确说,y又指向了1865402384这块内存区域了。这样一看,和C语言的指针还真的很像呢。
python中的赋值
如果是简单的int 之类的赋值 楼上说的是对的
但是 如果 a 是某个对象 比如是一个list 就是另外一个情况了
x=a 开辟了两块内存 一个存X一个存a
y=a 同上
而恰好 x y 指向内存中的值相等 仅此而已 改变x 根本不会影响到y
但是 x=a y=x 就不一样了
这里y 创建了x的一个浅复制 实际是指向的同一块内存
举个栗子:
x=[1,2,3]
y=[1,2,3]
x[0]=4
print x 是 [4,2,3]
print y 是[1,2,3]
但是 如果是
x=[1,2,3]
y=x
x[0]=4
print x 是[4,2,3]
print y 也是[4,2,3] 因为 x y 指向的是同一块内存