您的位置:

python指针赋值(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 指向的是同一块内存