精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

萬(wàn)丈高樓平地起,一切從 PyObject 開(kāi)始

開(kāi)發(fā) 前端
PyObject 是 Python 對(duì)象的核心,因?yàn)?Python 對(duì)象在 C 的層面就是一個(gè)結(jié)構(gòu)體,并且所有的結(jié)構(gòu)體都嵌套了 PyObject 結(jié)構(gòu)體。而 PyObject 內(nèi)部有引用計(jì)數(shù)和類型這兩個(gè)字段,因此我們可以肯定的說(shuō) Python 的任何一個(gè)對(duì)象都有引用計(jì)數(shù)和類型這兩個(gè)屬性。

楔子

在前面的文章中我們說(shuō)到,面向?qū)ο罄碚撝械念惡蛯?duì)象這兩個(gè)概念在 Python 內(nèi)部都是通過(guò)對(duì)象實(shí)現(xiàn)的。類是一種對(duì)象,稱為類型對(duì)象,類實(shí)例化得到的也是對(duì)象,稱為實(shí)例對(duì)象。

但是對(duì)象在 Python 的底層是如何實(shí)現(xiàn)的呢?Python 解釋器是基于 C 語(yǔ)言實(shí)現(xiàn)的 ,但 C 并不是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,那么它是如何實(shí)現(xiàn) Python 的面向?qū)ο蟮哪兀?/p>

首先對(duì)于人的思維來(lái)說(shuō),對(duì)象是一個(gè)比較形象的概念,但對(duì)于計(jì)算機(jī)來(lái)說(shuō),對(duì)象卻是一個(gè)抽象的概念。它并不能理解這是一個(gè)整數(shù),那是一個(gè)字符串,計(jì)算機(jī)所知道的一切都是字節(jié)。

通常的說(shuō)法是:對(duì)象是數(shù)據(jù)以及基于這些數(shù)據(jù)所能進(jìn)行的操作的集合。在計(jì)算機(jī)中,一個(gè)對(duì)象實(shí)際上就是一片被分配的內(nèi)存空間,這些內(nèi)存可能是連續(xù)的,也可能是離散的。

而 Python 的任何對(duì)象在 C 中都對(duì)應(yīng)一個(gè)結(jié)構(gòu)體實(shí)例,在 Python 中創(chuàng)建一個(gè)對(duì)象,等價(jià)于在 C 中創(chuàng)建一個(gè)結(jié)構(gòu)體實(shí)例。所以 Python 的對(duì)象,其本質(zhì)就是 C 的 malloc 函數(shù)為結(jié)構(gòu)體實(shí)例在堆區(qū)申請(qǐng)的一塊內(nèi)存。

下面我們就來(lái)分析一下對(duì)象在 C 中是如何實(shí)現(xiàn)的。

對(duì)象的地基:PyObject

Python 一切皆對(duì)象,而所有的對(duì)象都擁有一些共同的信息(也叫頭部信息),這些信息位于 PyObject 中,它是 Python 對(duì)象機(jī)制的核心,下面來(lái)看看它的定義。

注:我們整個(gè)系列的源碼都是 3.12 版本的。

// Include/pytypedefs.h
typedef struct _object PyObject;

我們看到具體定義位于 struct _object 中,PyObject 只是它的別名。

// Include/object.h
struct _object {
    _PyObject_HEAD_EXTRA
    union {
       Py_ssize_t ob_refcnt;
       PY_UINT32_T ob_refcnt_split[2];
    };
    PyTypeObject *ob_type;
};

注:源碼中定義的 struct _object 看起來(lái)會(huì)更復(fù)雜一些,因?yàn)槔锩孢€包含了一些宏判斷,用于適配不同的操作系統(tǒng)和編譯器。

圖片圖片

這些宏判斷我們不需要關(guān)注,對(duì)于當(dāng)前的 64 位機(jī)器來(lái)說(shuō),等價(jià)于如下。

// Include/object.h
struct _object {
    _PyObject_HEAD_EXTRA
    union {
       Py_ssize_t ob_refcnt;
       PY_UINT32_T ob_refcnt_split[2];
    };
    PyTypeObject *ob_type;
};

然后是 _PyObject_HEAD_EXTRA,它也是一個(gè)宏,定義如下。

// Include/object.h

// 如果定義了宏 Py_TRACE_REFS
#ifdef Py_TRACE_REFS
// 那么 _PyObject_HEAD_EXTRA 會(huì)展開(kāi)成如下兩個(gè)字段
// 顯然程序中創(chuàng)建的對(duì)象會(huì)組成一個(gè)雙向鏈表
#define _PyObject_HEAD_EXTRA      \
    PyObject *_ob_next;           \
    PyObject *_ob_prev;
// 用于將 _ob_next 和 _ob_prev 初始化為空
#define _PyObject_EXTRA_INIT _Py_NULL, _Py_NULL,

// 否則說(shuō)明沒(méi)有定義宏 Py_TRACE_REFS
// 那么 _PyObject_HEAD_EXTRA 和 _PyObject_EXTRA_INIT 不會(huì)有任何作用
#else
#  define _PyObject_HEAD_EXTRA
#  define _PyObject_EXTRA_INIT
#endif

關(guān)于 PyObject 的定義,再畫(huà)一張圖總結(jié)一下。

圖片圖片

Py_TRACE_REFS 一般只在編譯調(diào)試的時(shí)候會(huì)開(kāi)啟,我們從官網(wǎng)下載的都是 Release 版本,不包含這個(gè)宏,因此這里我們也不考慮它。

所以 PyObject 最終就等價(jià)于下面這個(gè)樣子:

// Include/object.h
struct _object {
    union {
       Py_ssize_t ob_refcnt;
       PY_UINT32_T ob_refcnt_split[2];
    };
    PyTypeObject *ob_type;
};

// Include/pytypedefs.h
typedef struct _object PyObject;

當(dāng)然這兩者也可以寫(xiě)在一起,即定義結(jié)構(gòu)體的同時(shí)起一個(gè)別名。

typedef struct _object {
    union {
       Py_ssize_t ob_refcnt;
       PY_UINT32_T ob_refcnt_split[2];
    };
    PyTypeObject *ob_type;
} PyObject;

方式是等價(jià)的,只不過(guò) Python 將兩者分開(kāi)了,并寫(xiě)在了不同的文件中。

了解了 PyObject 的結(jié)構(gòu)之后,我們?cè)賮?lái)看一下它內(nèi)部的字段。

ob_refcnt:引用計(jì)數(shù)

ob_refcnt 表示對(duì)象的引用計(jì)數(shù),當(dāng)對(duì)象被引用時(shí),ob_refcnt 會(huì)自增 1;引用解除時(shí),ob_refcnt 會(huì)自減 1。而當(dāng)對(duì)象的引用計(jì)數(shù)為 0 時(shí),則會(huì)被回收。

那么在哪些情況下,引用計(jì)數(shù)會(huì)加 1 呢?哪些情況下,引用計(jì)數(shù)會(huì)減 1 呢?

導(dǎo)致引用計(jì)數(shù)加 1 的情況:

  • 對(duì)象被創(chuàng)建:比如 name = "古明地覺(jué)",此時(shí)對(duì)象就是 "古明地覺(jué)" 這個(gè)字符串, 創(chuàng)建成功時(shí)它的引用計(jì)數(shù)為 1;
  • 變量傳遞使得對(duì)象被新的變量引用:比如 name2 = name;
  • 引用該對(duì)象的某個(gè)變量作為參數(shù)傳到一個(gè)函數(shù)或者類中:比如 func(name);
  • 引用該對(duì)象的某個(gè)變量作為元組、列表、集合等容器的元素:比如 lst = [name];

導(dǎo)致引用計(jì)數(shù)減 1 的情況:

  • 引用該對(duì)象的變量被顯式地銷毀:del name;
  • 引用該對(duì)象的變量指向了別的對(duì)象:name = "";
  • 引用該對(duì)象的變量離開(kāi)了它的作用域,比如函數(shù)的局部變量在函數(shù)執(zhí)行完畢的時(shí)候會(huì)被刪除;
  • 引用該對(duì)象的變量所在的容器被銷毀,或者變量從容器里面被刪除;

因?yàn)樽兞恐皇且粋€(gè)和對(duì)象綁定的符號(hào),接地氣一點(diǎn)的說(shuō)法就是變量是個(gè)便利貼,貼在指定的對(duì)象上面。所以 del 變量 并不是刪除變量指向的對(duì)象,而是刪除變量本身,可以理解為將對(duì)象身上的便利貼給撕掉了,其結(jié)果就是對(duì)象的引用計(jì)數(shù)減一。

至于對(duì)象是否被刪除(回收)則是解釋器判斷引用計(jì)數(shù)是否為 0 決定的,為 0 就刪,不為 0 就不刪,就這么簡(jiǎn)單。

然后需要強(qiáng)調(diào)的是,在 3.12 之前的 Python 源碼中,PyObject 是這么定義的,以 3.8 為例。

圖片圖片

在 3.12 之前,引用計(jì)數(shù)通過(guò)一個(gè) ob_refcnt 字段來(lái)維護(hù),字段類型為 Py_ssize_t,它是 ssize_t 的別名,在 64 位機(jī)器上等價(jià)于 int64。因此一個(gè)對(duì)象的引用計(jì)數(shù)不能超過(guò) int64 所表示的最大范圍。但很明顯,如果不費(fèi)九牛二虎之力去寫(xiě)惡意代碼,是不可能超過(guò)這個(gè)范圍的。

還是很好理解的,但從 3.12 開(kāi)始,卻搞了個(gè)共同體(union)出來(lái),這是為啥呢?因?yàn)?Python 從 3.12 開(kāi)始引入了一個(gè)概念叫永恒對(duì)象。顧名思義,永恒對(duì)象就是那些永遠(yuǎn)不會(huì)被回收的對(duì)象。

// Include/object.h
#define _Py_IMMORTAL_REFCNT UINT_MAX

永恒對(duì)象的引用計(jì)數(shù)為 uint32 類型的最大值,即 2 的 32 次方減 1,像 None、-5 到 256 之間的小整數(shù),都屬于永恒對(duì)象。

圖片圖片

共同體中的 ob_refcnt 字段的作用還和之前一樣,依舊是負(fù)責(zé)維護(hù)對(duì)象的引用計(jì)數(shù)。

但 ob_refcnt_split 也會(huì)維護(hù)一份引用計(jì)數(shù),它是 uint32 類型的數(shù)組,長(zhǎng)度為 2,但只會(huì)用數(shù)組的一個(gè)元素來(lái)維護(hù)。如果發(fā)現(xiàn)對(duì)象的引用計(jì)數(shù)達(dá)到了 uint32 的最大值,那么會(huì)將對(duì)象判定為永恒對(duì)象,而永恒對(duì)象永遠(yuǎn)不會(huì)被回收。

所以 ob_refcnt_split 是針對(duì)永恒對(duì)象引入的,它是一個(gè)長(zhǎng)度為 2 的 uint32 類型的數(shù)組,大小是 8 字節(jié)。而 ob_refcnt 是 Py_ssize_t 類型,等價(jià)于 int64,大小也是 8 字節(jié)。由于這兩者組成的是共同體,所以整體大小依舊是 8 字節(jié),因此 PyObject 結(jié)構(gòu)體實(shí)例的大小和之前一樣。

當(dāng)然啦,雖然引用計(jì)數(shù)是由共同體來(lái)維護(hù),但你把它當(dāng)成普通的 Py_ssize_t 類型的字段來(lái)理解也是可以的。因?yàn)?3.12 之前只有一個(gè) ob_refcnt,而 ob_refcnt_split 是針對(duì)永恒對(duì)象專門引入的。

ob_type:類型指針

對(duì)象是有類型的,類型對(duì)象描述實(shí)例對(duì)象的行為,而 ob_type 存儲(chǔ)的便是對(duì)應(yīng)類型對(duì)象的指針,所以類型對(duì)象在底層是一個(gè) PyTypeObject 結(jié)構(gòu)體實(shí)例。

從這里可以看出,所有的類型對(duì)象在底層都是由同一個(gè)結(jié)構(gòu)體實(shí)例化得到的,因?yàn)?PyObject 是所有對(duì)象共有的,它們的 ob_type 指向的都是 PyTypeObject。

所以不同的實(shí)例對(duì)象對(duì)應(yīng)不同的結(jié)構(gòu)體,但是類型對(duì)象對(duì)應(yīng)的都是同一個(gè)結(jié)構(gòu)體。

以上就是 PyObject,它的定義非常簡(jiǎn)單,就一個(gè)引用計(jì)數(shù)和一個(gè)類型對(duì)象的指針。這兩個(gè)字段的大小都是 8 字節(jié),所以一個(gè) PyObject 結(jié)構(gòu)體實(shí)例的大小是 16 字節(jié)。

另外,由于 PyObject 是所有對(duì)象都具有的,換句話說(shuō)就是所有對(duì)象對(duì)應(yīng)的結(jié)構(gòu)體內(nèi)部都內(nèi)嵌了 PyObject,因此你在 Python 里面看到的任何一個(gè)對(duì)象都有引用計(jì)數(shù)和類型這兩個(gè)屬性。

>>> num = 666  
>>> sys.getrefcount(num)
2
>>> num.__class__
<class 'int'>

>>> sys.getrefcount(sys)
72
>>> sys.__class__
<class 'module'>

>>> sys.getrefcount(sys.path)
2
>>> sys.path.__class__
<class 'list'>

>>> def foo():  pass
... 
>>> sys.getrefcount(foo)
2
>>> foo.__class__
<class 'function'>

引用計(jì)數(shù)可以通過(guò) sys.getrefcount 函數(shù)查看,類型可以通過(guò) type(obj) 或者 obj.__class__ 查看。

可變對(duì)象的地基:PyVarObject

PyObject 是所有對(duì)象的核心,它包含了所有對(duì)象都共有的信息,但是還有那么一個(gè)屬性雖然不是每個(gè)對(duì)象都有,但至少有一大半的對(duì)象會(huì)有,能猜到是什么嗎?

之前說(shuō)過(guò),對(duì)象根據(jù)所占的內(nèi)存是否固定,可以分為定長(zhǎng)對(duì)象和變長(zhǎng)對(duì)象,而變長(zhǎng)對(duì)象顯然有一個(gè)長(zhǎng)度的概念,比如字符串、列表、元組等等。即便是相同類型的實(shí)例對(duì)象,但是長(zhǎng)度不同,所占的內(nèi)存也是不同的。

比如字符串內(nèi)部有多少個(gè)字符,元組、列表內(nèi)部有多少個(gè)元素,顯然這里的多少也是 Python 中很多對(duì)象的共有特征。雖然不像引用計(jì)數(shù)和類型那樣是每個(gè)對(duì)象都必有的,但也是絕大部分對(duì)象所具有的。

所以針對(duì)變長(zhǎng)對(duì)象,Python 底層也提供了一個(gè)結(jié)構(gòu)體,因?yàn)?Python 里面很多都是變長(zhǎng)對(duì)象。

// Include/object.h
typedef struct {
    PyObject ob_base;
    Py_ssize_t ob_size;
} PyVarObject;

我們看到 PyVarObject 實(shí)際上是 PyObject 的一個(gè)擴(kuò)展,它在 PyObject 的基礎(chǔ)上提供了一個(gè) ob_size 字段,用于記錄內(nèi)部的元素個(gè)數(shù)。比如列表,列表的 ob_size 維護(hù)的就是列表的元素個(gè)數(shù),插入一個(gè)元素,ob_size 會(huì)加 1,刪除一個(gè)元素,ob_size 會(huì)減 1。

因此使用 len 函數(shù)獲取列表的元素個(gè)數(shù)是一個(gè)時(shí)間復(fù)雜度為 O(1) 的操作,因?yàn)?ob_size 始終和內(nèi)部的元素個(gè)數(shù)保持一致,所以會(huì)直接返回 ob_size。

所有的變長(zhǎng)對(duì)象都擁有 PyVarObject,而所有的對(duì)象都擁有 PyObject,這就使得在 Python 中,對(duì)對(duì)象的引用變得非常統(tǒng)一。我們只需要一個(gè) PyObject * 就可以引用任意一個(gè)對(duì)象,而不需要管這個(gè)對(duì)象實(shí)際是一個(gè)什么樣的對(duì)象。

所以 Python 變量、以及容器內(nèi)部的元素,本質(zhì)上都是一個(gè) PyObject *。而在操作變量的時(shí)候,也要先根據(jù) ob_type 字段判斷指向?qū)ο蟮念愋停缓笤賹ふ以搶?duì)象具有的方法,這也是 Python 效率慢的原因之一。

由于 PyObject 和 PyVarObject 要經(jīng)常被使用,所以底層提供了兩個(gè)宏,方便定義。

// Include/object.h
#define PyObject_HEAD    PyObject ob_base;
#define PyObject_VAR_HEAD    PyVarObject ob_base;

比如定長(zhǎng)對(duì)象浮點(diǎn)數(shù),在底層對(duì)應(yīng)的結(jié)構(gòu)體為 PyFloatObject,它只需在 PyObject 的基礎(chǔ)上再加一個(gè) double 即可。

typedef struct {
    // 等價(jià)于 PyObject ob_base;
    PyObject_HEAD
    double ob_fval;
} PyFloatObject;

再比如變長(zhǎng)對(duì)象列表,在底層對(duì)應(yīng)的結(jié)構(gòu)體是 PyListObject,所以它需要在 PyVarObject 的基礎(chǔ)上再加一個(gè)指向指針數(shù)組首元素的二級(jí)指針和一個(gè)容量。

typedef struct {
    PyObject_VAR_HEAD
    PyObject **ob_item;
    Py_ssize_t allocated;
} PyListObject;

這上面的每一個(gè)字段都代表什么,我們之前提到過(guò),當(dāng)然這些內(nèi)置的數(shù)據(jù)結(jié)構(gòu)后續(xù)還會(huì)單獨(dú)剖析。

里面的 ob_item 就是指向指針數(shù)組首元素的二級(jí)指針,而 allocated 表示已經(jīng)分配的容量,一旦添加元素的時(shí)候發(fā)現(xiàn) ob_size 自增 1 之后會(huì)大于 allocated,那么解釋器就知道數(shù)組已經(jīng)滿了(容量不夠了)。于是會(huì)申請(qǐng)一個(gè)長(zhǎng)度更大的指針數(shù)組,然后將舊數(shù)組內(nèi)部的元素按照順序逐個(gè)拷貝到新數(shù)組里面去,并讓 ob_item 指向新數(shù)組的首元素,這個(gè)過(guò)程就是列表的擴(kuò)容,后續(xù)在剖析列表的時(shí)候還會(huì)細(xì)說(shuō)。

所以我們看到列表在添加元素的時(shí)候,地址是不會(huì)改變的,即使容量不夠了也沒(méi)有關(guān)系,直接讓 ob_item 指向新的數(shù)組就好了,至于 PyListObject 對(duì)象本身的地址是不會(huì)變化的。

小結(jié)

PyObject 是 Python 對(duì)象的核心,因?yàn)?Python 對(duì)象在 C 的層面就是一個(gè)結(jié)構(gòu)體,并且所有的結(jié)構(gòu)體都嵌套了 PyObject 結(jié)構(gòu)體。而 PyObject 內(nèi)部有引用計(jì)數(shù)和類型這兩個(gè)字段,因此我們可以肯定的說(shuō) Python 的任何一個(gè)對(duì)象都有引用計(jì)數(shù)和類型這兩個(gè)屬性。

另外大部分對(duì)象都有長(zhǎng)度的概念,所以 PyObject 再加上長(zhǎng)度就誕生出了 PyVarObject,它在 PyObject 的基礎(chǔ)上添加了一個(gè) ob_size 字段,用于描述對(duì)象的長(zhǎng)度。比如字符串內(nèi)部的 ob_size 維護(hù)的是字符串的字符個(gè)數(shù),元組、列表、字典等等,其內(nèi)部的 ob_size 維護(hù)的是存儲(chǔ)的元素個(gè)數(shù),所以使用 len 函數(shù)獲取對(duì)象長(zhǎng)度是一個(gè) O(1) 的操作。

責(zé)任編輯:武曉燕 來(lái)源: 古明地覺(jué)的編程教室
相關(guān)推薦

2019-07-19 14:51:54

2018-06-23 07:31:05

2009-03-26 17:43:10

2021-12-09 22:36:30

Java 字節(jié)碼頁(yè)緩存

2021-12-16 23:02:57

前端功能JavaScript

2021-01-27 08:03:04

IDEAProject StrIntelliJ ID

2025-11-12 07:40:37

2010-04-29 13:40:53

2013-11-04 14:02:24

AMD

2017-09-04 15:08:37

Linux系統(tǒng)Linux 1.0

2023-09-07 15:11:44

2017-04-11 12:00:56

windows vis微軟

2020-09-11 10:55:10

useState組件前端

2019-11-07 09:20:29

Java線程操作系統(tǒng)

2016-08-31 17:24:05

大數(shù)據(jù)分析

2012-12-31 11:22:58

開(kāi)源開(kāi)放

2022-07-22 14:05:46

超級(jí)云自動(dòng)化

2021-02-19 23:08:27

軟件測(cè)試軟件開(kāi)發(fā)

2018-11-23 11:17:24

負(fù)載均衡分布式系統(tǒng)架構(gòu)

2021-09-01 07:21:39

Exporter指標(biāo)監(jiān)控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

不卡区在线中文字幕| 欧美视频四区| 欧美日韩在线播放| 先锋影音男人资源| 狠狠综合久久av一区二区| 亚洲一区二区动漫| 久久久精品国产网站| 亚洲一级av无码毛片精品| 香蕉成人影院| 亚洲一区二区三区四区在线免费观看| 久久精品国产理论片免费| jizz国产在线| 亚洲精品麻豆| 久久精品亚洲94久久精品| 国产精品成人无码专区| 综合久久av| 欧美午夜宅男影院在线观看| 一区二区成人国产精品 | 中文字幕伦理免费在线视频 | 一区二区三区视频在线| 国产精品99久久久精品无码| 成人日韩精品| 天天综合天天做天天综合| 青少年xxxxx性开放hg| 日本aaa在线观看| 国产成人99久久亚洲综合精品| 国产精品旅馆在线| 久久免费激情视频| 在线精品一区| 欧美极品少妇全裸体| 久久久久久久久久97| 欧美精品系列| 亚洲色图综合久久| 性久久久久久久久久久| 亚洲无线观看| 欧美成人激情免费网| 亚洲一级片av| 日日夜夜亚洲精品| 欧美日韩中文国产| 欧美日韩大尺度| 国模冰冰炮一区二区| 亚洲一级二级在线| 黄色a级片免费看| 污网站在线免费看| 亚洲欧美日韩在线不卡| 少妇熟女一区二区| 麻豆系列在线观看| 中文字幕日韩欧美一区二区三区| 亚洲v欧美v另类v综合v日韩v| 日本一本草久在线中文| 99国产精品久| 国产综合动作在线观看| 五月天婷婷视频| 99久久精品国产网站| 国产日韩久久| 日本在线视频1区| 久久久亚洲高清| 欧美精品二区三区四区免费看视频| 人妻夜夜爽天天爽| 成人高清视频免费观看| 国产综合精品一区二区三区| 全部免费毛片在线播放网站| 久久天天做天天爱综合色| 欧美日韩在线一二三| 美国成人毛片| 国产精品狼人久久影院观看方式| 亚洲一区高清| 亚洲丝袜精品| 激情亚洲一区二区三区四区| 日本不卡在线观看视频| 色豆豆成人网| 欧美丰满美乳xxx高潮www| 国产又粗又猛大又黄又爽| 国产成人aa在线观看网站站| 精品成人影院| 国产一区二区三区精品久久久 | 精品99在线视频| 希岛爱理一区二区三区av高清| 欧美私模裸体表演在线观看| 久久综合在线观看| 精品按摩偷拍| 在线播放日韩精品| 成熟的女同志hd| 日韩视频久久| 国产精品视频久久久| 国产成人三级一区二区在线观看一| 成人白浆超碰人人人人| 日本不卡二区高清三区| 1stkiss在线漫画| 一本色道久久综合精品竹菊| 中文字幕第88页| 成人在线tv视频| 在线观看欧美www| 精品99在线观看| 日韩精品亚洲一区| 99电影网电视剧在线观看| 香蕉视频黄色片| 日韩理论在线观看| 黑人糟蹋人妻hd中文字幕| 亚洲精品成人一区| 日韩精品在线视频美女| 成人免费视频国产免费观看| 午夜在线视频观看日韩17c| 成人免费看黄网站| 欧美美乳在线| 亚洲韩国一区二区三区| 网站一区二区三区| 欧洲亚洲视频| 欧美美女15p| www.久久网| www.66久久| 男同互操gay射视频在线看| 亚洲精品日产| 日韩午夜激情电影| 成人一级片免费看| 久久久成人网| 九九九九精品| 羞羞的视频在线看| 欧美猛男超大videosgay| 加勒比综合在线| 国产精品jizz在线观看美国| 国产免费一区视频观看免费| 欧美日本网站| 欧美午夜片欧美片在线观看| 久久国产劲爆∧v内射| 一区二区中文| 成人午夜高潮视频| 91精彩视频在线播放| 疯狂做受xxxx欧美肥白少妇| 日本一区二区免费视频| 88国产精品视频一区二区三区| 国产成人一区二区三区电影| 日色在线视频| 欧美日韩精品在线观看| 成年女人免费视频| 欧美日韩久久| 91成人免费在线观看| 黄色在线播放网站| 欧美精品久久天天躁| 国产不卡在线观看视频| 欧美a级一区二区| 色一情一乱一伦一区二区三欧美| 丁香六月综合| 国产亚洲精品一区二区| 69xxxx国产| 日本一区二区三区四区| 精品久久久久久久无码| 欧美日一区二区| 国产精品网红福利| 一区二区三区视频网站 | 久久撸在线视频| 日本女优一区| 国产乱肥老妇国产一区二 | 欧美第一淫aaasss性| 国产福利小视频| 亚洲午夜激情av| 一本加勒比波多野结衣| 噜噜爱69成人精品| 婷婷久久伊人| 国产一区二区三区黄网站| 欧美精品手机在线| 欧美熟女一区二区| 欧美日韩国产限制| 精品人妻一区二区三区四区| 久久99精品久久久久婷婷| 精品一区二区三区毛片| 国产精伦一区二区三区| 欧美一级片在线播放| 毛片在线播放网址| 69堂国产成人免费视频| 校园春色 亚洲| 99免费精品视频| 久久午夜夜伦鲁鲁一区二区| 亚洲字幕久久| 国产呦系列欧美呦日韩呦| 欧美成人ⅴideosxxxxx| 色偷偷91综合久久噜噜| 亚洲精华国产精华精华液网站| 偷窥国产亚洲免费视频| 国产又黄又粗视频| 国产盗摄女厕一区二区三区| 男女超爽视频免费播放| 精品久久综合| 99国精产品一二二线| 天堂av中文在线观看| 日韩在线视频播放| 欧美 日韩 综合| 欧美日韩国产综合草草| 国产精品成人久久| 中文字幕第一页久久| 高清中文字幕mv的电影| 日本亚洲三级在线| www.在线观看av| 波多野结衣的一区二区三区| 99久久精品免费看国产四区 | 91深夜福利视频| 桃色av一区二区| 久久中文字幕国产| 免费在线观看一级毛片| 日韩欧美卡一卡二| 亚洲午夜无码久久久久| 亚洲国产日韩av| www.99re6| 久久美女高清视频| 日本wwwxx| 蜜臀av一区二区在线免费观看| www.好吊操| 91蜜臀精品国产自偷在线| 久久久久久久久久久久久久久久av | 亚洲色图欧美另类| 精品一区二区三区日韩| 爱福利视频一区二区| 亚洲天堂男人| 四虎4hu永久免费入口| 欧美偷拍自拍| 久久久久无码国产精品一区| 日本精品在线播放| 国产自摸综合网| 亚洲精品一区三区三区在线观看| 91精品国产91久久久久久最新| 黄av在线免费观看| 中日韩美女免费视频网址在线观看| 天天插天天干天天操| 日韩美女在线视频| 国产模特av私拍大尺度 | 免费观看黄一级视频| 91精品久久久久久久久99蜜臂| 亚洲精品毛片一区二区三区| 欧美视频在线观看免费网址| 日韩成人免费在线观看| 亚洲一二三专区| 欧美日韩精品亚洲精品| 中文字幕日本不卡| 人人澡人人澡人人看| 国产精品欧美经典| 色噜噜噜噜噜噜| 国产精品嫩草影院com| 人人爽人人爽人人片| 国产三级一区二区三区| a毛片毛片av永久免费| 99久久免费国产| 国产精品久久久久久久无码| 不卡视频一二三| www.88av| 久久久久久久久久久久久久久99| 国产精品嫩草av| 91麻豆6部合集magnet| 大又大又粗又硬又爽少妇毛片| 91麻豆成人久久精品二区三区| av网站免费在线播放| 久久久高清一区二区三区| 精品国产av无码| 国产女主播视频一区二区| 国产又粗又猛又爽又黄的视频四季 | 国内小视频在线看| 高清在线视频日韩欧美| 捆绑调教日本一区二区三区| 欧美亚洲国产精品| 在线日本欧美| 91九色综合久久| 一区视频网站| 久久久久网址| 日韩一区二区在线| 欧美少妇一级片| 精品福利电影| 中文字幕在线导航| 韩国成人在线视频| 95视频在线观看| 国产午夜亚洲精品理论片色戒| 快灬快灬一下爽蜜桃在线观看| 亚洲欧洲www| 国产极品在线播放| 91久久精品国产91性色tv| 一级片aaaa| 欧美精品一区二区三区四区| 久久这里精品| 久久中文字幕一区| a级片在线免费观看| 国产精品黄视频| 欧一区二区三区| 欧美一进一出视频| 亚洲精品久久久| 欧美日韩在线一| 老司机精品视频一区二区三区| 香蕉视频xxxx| 久久影视一区二区| 黑鬼狂亚洲人videos| 精品国产成人av| 一本色道久久综合无码人妻| 精品91自产拍在线观看一区| 国产视频福利在线| 欧美激情国产日韩精品一区18| 美女写真久久影院| 成人高清在线观看| 日韩欧美电影| 久色视频在线播放| 极品销魂美女一区二区三区| 玖玖爱在线观看| 亚洲最大的成人av| 中文字幕制服诱惑| 精品视频久久久久久| 最新黄网在线观看| 国产精品草莓在线免费观看| 岛国av一区| 一区二区av| 日韩中文字幕一区二区三区| 黄色激情在线观看| 亚洲视频狠狠干| 久久精品99北条麻妃| 亚洲国产精品福利| 性欧美1819sex性高清大胸| 国产精品久久久久久久久久99| 久久综合五月婷婷| 4444在线观看| 久久电影国产免费久久电影| 中文幕无线码中文字蜜桃| 亚洲综合一区在线| 国产美女明星三级做爰| 在线精品播放av| 桃花岛成人影院| 久久久久久久有限公司| 激情久久中文字幕| 69久久精品无码一区二区| 国产精品夫妻自拍| 久久久久精彩视频| 国产亚洲福利一区| 韩国主播福利视频一区二区三区| 极品尤物一区二区三区| 欧美深夜福利| 色欲欲www成人网站| 亚洲久草在线视频| 国产精品人妻一区二区三区| 日韩天堂在线视频| 久久青草视频| 一区二区在线不卡| 开心九九激情九九欧美日韩精美视频电影 | 一区二区三区高清| www.av日韩| 九九九久久国产免费| 国产一区二区三区| 国产 国语对白 露脸| 日韩精品视频网站| 黄免费在线观看| 欧美亚洲免费在线一区| fc2在线中文字幕| 国产精品视频自拍| 91视频一区| 九九热视频免费| 一区二区三区**美女毛片| 亚洲AV无码精品自拍| 久久久人成影片一区二区三区| 国产区精品视频在线观看豆花| 91黄色在线看| 久久婷婷久久一区二区三区| 国产天堂第一区| 久久久精品一区| 51亚洲精品| 午夜精品久久久内射近拍高清| 国产亚洲欧美日韩俺去了| 中文字幕日韩国产| 久久艳片www.17c.com| 一区二区三区在线资源| 人妻av中文系列| 国产欧美日韩精品一区| 91影院在线播放| 欧美激情欧美狂野欧美精品| 日韩理论电影中文字幕| 黄色高清无遮挡| 亚洲少妇中出一区| 天堂av资源在线| 国产精品三级在线| 欧美午夜不卡| 亚洲av无码一区二区三区人| 欧美日韩大陆一区二区| 欧美hdxxxx| 日韩av电影免费在线观看| 国产原创一区二区三区| 日韩精品人妻中文字幕| 一区二区三区视频免费在线观看| 国产在线一区不卡| 国产亚洲综合视频| 中文字幕欧美一区| 日漫免费在线观看网站| 91九色视频导航| 欧美中文字幕| 欧美爱爱免费视频| 日韩精品视频免费在线观看| 涩涩涩久久久成人精品| 天堂…中文在线最新版在线| 中文乱码免费一区二区| 丁香六月天婷婷| 国产原创欧美精品| 国产日韩欧美三级| 希岛爱理中文字幕| 亚洲欧美日韩精品| 国产 日韩 欧美 综合 一区| 麻豆三级在线观看| 婷婷久久综合九色综合绿巨人| 欧美三级黄网| 欧美日韩国产精品一卡|