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

深入了解Python字符串對象的實現

開發 后端
本文介紹了 python 內部是如何管理字符串對象,以及字符串查找操作是如何實現的。

本文介紹了 python 內部是如何管理字符串對象,以及字符串查找操作是如何實現的。

PyStringObject 結構體

Python 中的字符串對象在內部對應一個名叫 PyStringObject 的結構體。“ob_shash” 對應字符串經計算過的 hash值, “ob_sval” 指向一段長度為 “ob_size” 的字符串,且該字符串以‘null’結尾(為了兼容C)。“ob_sval”的初始大小為1個字節,且 ob_sval[0]=0(對應空字符串)。若你還想知道“ob_size”被定義的位置,可以看一看 object.h 頭文件中 PyObject_VAR_HEAD 對應部分。“ob_sstate” 用來指示某個字符串是否已經存在于intern機制對應的字典中,后面我們會再次提到這一點。

  1. typedef struct { 
  2.  
  3.     PyObject_VAR_HEAD 
  4.  
  5.     long ob_shash; 
  6.  
  7.     int ob_sstate; 
  8.  
  9.     char ob_sval[1]; 
  10.  
  11. } PyStringObject;  

字符串對象的創建

如下所示,當將一個新的字符串賦給一個變量時,發生了什么?

  1. 1>>> s1 = 'abc' 

運行以上代碼時,內部的 C 函數 “PyString_FromString” 將被調用并生成類似下面的偽代碼: 

  1. arguments: string object: 'abc' 
  2.  
  3. returns: Python string object with ob_sval = 'abc' 
  4.  
  5. PyString_FromString(string): 
  6.  
  7.     size = length of string 
  8.  
  9.     allocate string object + size for 'abc'. ob_sval will be of sizesize + 1 
  10.  
  11.     copy string to ob_sval 
  12.  
  13.     return object  

每次用到新的字符串時,都將分配一個字符串對象。

共享字符串對象

Python 有一個優雅的特性,就是變量之間的短字符串是共享的,這一特性可以節省所需的內存空間。短字符串就是那些長度為 0 個或者 1 個字節的字符串。而全局變量 “interned” 對應一個用于索引這些短字符串的字典。數組 “characters” 也可用于索引那些長度為 1 個字節的字符串,比如單個字母。后面我們將看到數組 “characters” 是如何被使用的。

  1. static PyStringObject *characters[UCHAR_MAX + 1]; 
  2.  
  3. static PyObject *interned;  

下面一起看看:當你在 Python 腳本中將一個短字符串賦值給一個變量時,背后發生了哪些事情。

  1. static PyStringObject *characters[UCHAR_MAX + 1]; 
  2.  
  3. static PyObject *interned;  

內容為 ‘a’ 的字符串對象將被添加到 “interned” 字典中。字典中鍵(key)是一個指向該字符串對象的指針,而對應的值 就是一個相同的指針。在數組 “characters” 中,這一新的字符串對象在偏移量為 97 的位置被引用,因為字符 ‘a’ 的ASCII碼值便是 97。變量 “s2” 也指向了這一字符串對象。

 

 

而,當另外一個變量也被相同的字符串 ‘a’ 賦值時,又會如何呢?

  1. 1>>> s3 = 'a' 

上述代碼執行后,將返回之前已創建的內容相同的字符串對象。因此,‘s1’ 和 ‘s3’ 兩個變量都將指向同一個字符串對象。 數組 “characters” 便是用于檢測字符串 ‘a’ 是否已經存在,若存在,則返回指向該字符串對象的指針。

  1. if (size == 1 && (op = characters[*str & UCHAR_MAX]) != NULL
  2.  
  3.  
  4.     ... 
  5.  
  6.     return (PyObject *)op; 
  7.  

 

下面我們新建一個內容為 ‘c’ 的短字符串:

  1. 1>>> s4 = 'c' 

那么,我們將得到如下結果:

 

我們還能發現,當按照下面 Python 腳本中的方式對一個字符串元素進行訪問時,數組 “characters” 仍有用武之地。

  1. >>> s5 = 'abc' 
  2.  
  3. >>> s5[0] 
  4.  
  5. 'a'  

上面第二行代碼中,返回的是數組 “characters” 偏移量為 97 的位置內的指針元素,而非新建一個值為 ‘a’的字符串。當我們訪問某個字符串中的元素時,一個名叫 “string_item” d的函數將被調用,下方給出了函數體代碼。其中,參數 ‘a’ 便對應著字符串 “abc”,而參數 ‘i’ 便是訪問數組的索引值(本例中便為 0 ),函數返回的是指向某個字符串對象的指針。

  1. static PyObject * 
  2.  
  3. string_item(PyStringObject *a, register Py_ssize_t i) 
  4.  
  5.  
  6.     char pchar; 
  7.  
  8.     PyObject *v; 
  9.  
  10.     ... 
  11.  
  12.     pchar = a->ob_sval[i]; 
  13.  
  14.     v = (PyObject *)characters[pchar & UCHAR_MAX]; 
  15.  
  16.     if (v == NULL
  17.  
  18.         // allocate string 
  19.  
  20.     else { 
  21.  
  22.         ... 
  23.  
  24.         Py_INCREF(v); 
  25.  
  26.     } 
  27.  
  28.     return v; 
  29.  
  30.  

數組 “characters” 也可用于函數名長度為 1 時的情形,如下所示:

  1. >>> def a(): pass 

字符串查找

下面看看,當你在如下 Python 代碼中進行字符串查找操作時,又會有那些事情發生呢?

  1. >>> s = 'adcabcdbdabcabd' 
  2.  
  3. >>> s.find('abcab'
  4.  
  5. >>> 11  

函數 “find” 返回一個索引值,說明是在字符串 “abcd” 的哪個位置找到字符串 “s” 的。若字符串未找到,函數返回值為 -1。

那么,內部到底干了些啥事情?內部調用了一個名為 “fastsearch” 的函數。這個函數是一個介于 BoyerMoore 和 Horspool 算法之間的混合版本,它兼具兩者的優良特性。

我們將 “s”(s = ‘adcabcdbdabcabd’)稱作主字符串,而將 “p”(p = ‘abcab’)稱作模式串。n 和 m 分別表示字符串 s 和 字符串 p 的長度,其中,n = 15, m = 5。

在如下代碼段中,明顯看到,程序將進行***判定:若 m > n,我們就知道必然不能找到這樣的索引號,因此函數直接返回 -1 即可。

  1. w = n - m; 
  2.  
  3. if (w < 0) 
  4.  
  5. return -1;  

當 m = 1 時,程序便在字符串 s 中一個個字符地進行遍歷,若匹配成功則返回對應的索引位置。在本例中,變量 mode 值為 FAST_SEARCH,意味著我們想獲取的是在主字符串中***匹配的位置,而非模式串在主字符串中成功匹配的次數。

  1. if (m <= 1) { 
  2.  
  3.     ... 
  4.  
  5.     if (mode == FAST_COUNT) { 
  6.  
  7.         ... 
  8.  
  9.     } else { 
  10.  
  11.         for (i = 0; i < n; i++) 
  12.  
  13.             if (s[i] == p[0]) 
  14.  
  15.                 return i; 
  16.  
  17.     } 
  18.  
  19.     return -1; 
  20.  
  21.  

考慮其他情況,比如 m > 1。首先創建一個壓縮的boyer-moore delta 1 table(對應BM算法中的壞字符規則),在此過程中需要聲明兩個變量:“mask” 和 “skip”。

“mask” 是一個 32 位的位掩碼(bitmask),將其***的 5 個特征位作為開關位。該掩碼是通過和模式串 “p” 進行操作產生的。它設計成一個布隆過濾器(bloom filter),用于檢測一個字符是否出現在當前字符串中。這種機制使查找操作十分迅速,但是存在偽正的情況(false positives)。關于布隆過濾器,你想有更多了解的話可以看看 這里 。對于本例,下方說明了位掩碼具體是如何產生的。

  1. mlast = m - 1 
  2.  
  3. /* process pattern[:-1] */ 
  4.  
  5. for (mask = i = 0; i < mlast; i++) { 
  6.  
  7.     mask |= (1 << (p[i] & 0x1F)); 
  8.  
  9.  
  10. /* process pattern[-1] outside the loop */ 
  11.  
  12. mask |= (1 << (p[mlast] & 0x1F));  

字符串 “p” 的***個字符為 ‘a’。字符‘a’的二進制表示為 97 = 1100001。保留***的 5 個特征位,我們得到了 00001,因此變 “mask” 初次被設定為 10(1 << 1)。當整個字符串 “p” 都經過處理后,mask 值為 1110。那么,我們應該如何使用這個位掩碼呢?通過下方這行代碼,我們用其來檢測字符 “c” 位于字符串 “p” 哪個位置。

  1. if ((mask & (1 << (c & 0x1F)))) 

那么,字符 ‘a’ 在字符串 “p”(‘abcab’)中是否存在呢?1110 & (1 << (‘a’ & 0X1F)) 運算結果的值是否為 true 呢?由于 1110 & (1 << (‘a’ & 0X1F)) = 1110 & 10 = 10,可知 ‘a’ 確實存在于 ‘abcab’。當檢測字符 ‘d’時,我們得到的是 false,對于其他字符(從 ‘e’ 到 ‘z’)也是同樣結果。因此,在本例中此類過濾器表現十分出眾。 變量 “skip” 對應目標字符在主字符串中***一個成功匹配的字符的索引位置(從后向前匹配)。假若模式串的***一個匹配字符在主字符串中不存在,則 “skip” 值為 模式串 “p” 的長度減去 1。本例中,模式串***一個為匹配字符位 ‘b’,由于其在主串查找的當前位置向后跳兩個字符后能夠匹配到,因此變量 “skip” 的值為2。這個變量應用于一種名叫壞字符跳躍(bad-character skip)的規則。在如下示例中,p = ‘abcab’,s = ‘adcabcaba’。從主串 “s” 的 4 號索引位置(從 0 開始計算)開始匹配,若字符匹配成功則向前繼續匹配。***個匹配失敗的索引位置為 1(此處 ‘b’ 不等于 ‘d’)。我們可以看到,在模式串和主串最開始匹配的末端位置往后數三個字符,主串中也有一個 ‘b’,而字符 ‘c’ 也存在于 “p” 中,因此我們跳過了隨后的 ‘b’。

 

下面,看下查找操作的循環部分(真實代碼為 C 實現,而非 Python):

  1. for i = 0 to n - m = 13: 
  2.  
  3.     if s[i+m-1] == p[m-1]: 
  4.  
  5.         if s[i:i+mlast] == p[0:mlast]: 
  6.  
  7.             return i 
  8.  
  9.         if s[i+m] not in p: 
  10.  
  11.             i += m 
  12.  
  13.         else
  14.  
  15.             i += skip 
  16.  
  17.     else
  18.  
  19.         if s[i+m] not in p: 
  20.  
  21.             i += m 
  22.  
  23. return -1  

“s[i+m] not in p” 這行測試代碼是基于位掩碼實現的,“i += skip” 便對應壞字符跳躍。當主串下一個待匹配的字符在 “p” 中并未找到時,則執行 “i += m” 這行代碼。

下面來看看,對于字符串 “p” 和 “s” 的匹配,算法具體是如何運行的。前三個步驟與上面類似,接著,字符 ‘d’ 在字符串 “p” 并未找到,因此我們直接跳過等于“p”字符串長度的字符數,之后便迅速找到了一個匹配。

 

有關Python字符串對象完整的代碼實現, 去這里看看(http://svn.python.org/projects/python/trunk/Objects/stringobject.c) 。 

責任編輯:龐桂玉 來源: Python開發者
相關推薦

2010-11-08 15:58:54

SQL Server連

2010-11-26 10:22:28

MySQL字符串比較

2010-11-01 15:06:52

MYSQL字符串連接

2016-10-20 08:46:17

2010-09-28 09:14:36

HTML DOMJavascript

2023-11-02 07:55:31

Python對象編程

2009-11-03 13:33:39

VB.NET對象列表

2010-11-19 16:22:14

Oracle事務

2020-09-21 09:53:04

FlexCSS開發

2022-08-26 13:48:40

EPUBLinux

2009-08-25 16:27:10

Mscomm控件

2010-07-13 09:36:25

2010-06-23 20:31:54

2020-07-20 06:35:55

BashLinux

2019-08-02 08:59:21

Token認證服務器

2017-01-20 08:30:19

JavaScriptfor循環

2019-11-29 16:21:22

Spring框架集成

2018-02-24 13:21:02

2021-09-03 08:27:47

FortinetSASE平臺安全

2018-09-04 16:20:46

MySQ索引數據結構
點贊
收藏

51CTO技術棧公眾號

国产又大又黑又粗| 无码熟妇人妻av| av福利在线导航| 久久女同性恋中文字幕| 国产玖玖精品视频| 久久艹精品视频| 免费欧美激情| 日韩美女天天操| www.日本xxxx| 丁香花视频在线观看| 久久精品水蜜桃av综合天堂| 亚洲综合日韩在线| 国产女主播喷水视频在线观看| 亚洲天天综合| 国产亚洲精品久久久| 美女日批在线观看| 成人免费一区| 欧美性猛交视频| 国产在线视频在线| 北条麻妃在线| 91麻豆精品一区二区三区| 成人av.网址在线网站| 狠狠人妻久久久久久| 欧美日本一区二区高清播放视频| 一区二区在线视频| 国产精品无码专区| 一区二区三区四区视频免费观看 | 国产精品一区二区三区99| 欧美性在线观看| 国产成人精品av久久| 久久一区91| 日韩精品中文字幕有码专区| 亚洲精品乱码久久久久久9色| 日韩久久一区| 欧美性三三影院| 久草青青在线观看| 成年男女免费视频网站不卡| 一区二区三区日韩欧美精品| 一道本在线观看视频| h视频在线观看免费| 91在线观看地址| 国产精品一区在线观看| 性中国古装videossex| 国产综合成人久久大片91| 国产精品亚洲综合天堂夜夜| 久久久久久久久黄色| 国产日韩欧美一区在线| 欧美激情亚洲精品| 国产精品成人网站| 欧美成人久久| 久久电影一区二区| avove在线播放| 欧美激情一级片一区二区| 久热精品视频在线观看一区| 午夜剧场免费在线观看| 亚洲国产精品综合久久久 | 51精品久久久久久久蜜臀| 亚洲涩涩在线观看| 深夜日韩欧美| 91麻豆精品国产无毒不卡在线观看| 日本高清久久久| 亚洲欧美在线综合| 日韩一区二区三区四区| 粗大的内捧猛烈进出视频| 成人高潮a毛片免费观看网站| 精品不卡在线视频| 亚洲国产第一区| 丝袜连裤袜欧美激情日韩| 日韩精品视频在线观看免费| 亚洲国产无码精品| 日本一区二区免费高清| 精品国产欧美一区二区五十路| 国产免费一区二区三区四区| 国产综合自拍| 97香蕉久久超级碰碰高清版| 亚洲欧美另类在线视频| 蜜臀久久久久久久| 亚洲a一级视频| 亚洲国产精品国自产拍久久| 99这里只有精品| 亚洲国产精品久久久久久女王| 麻豆电影在线播放| 亚洲高清一区二区三区| av天堂永久资源网| 久久精品嫩草影院| 日韩一级二级三级| 99re久久精品国产| 日韩理论电影| 欧美激情第6页| 亚洲天堂男人av| 国产精品白丝jk白祙喷水网站| 国产嫩草一区二区三区在线观看| 国产人成在线视频| 一区二区国产盗摄色噜噜| 可以免费观看av毛片| 亚洲精品毛片| 日韩经典第一页| 搜索黄色一级片| 国产精品毛片在线| 成人写真视频福利网| 天天干天天爱天天操| 国产精品久久久久久久久搜平片 | 久久精品久久精品国产大片| 秋霞午夜在线观看| 五月激情综合婷婷| 午夜激情视频网| 欧洲grand老妇人| 不用播放器成人网| 日本视频在线观看免费| 国产成人午夜视频| 日韩精品久久一区| 丁香高清在线观看完整电影视频 | 中文字幕第80页| 日韩欧美久久| 少妇高潮久久77777| 国偷自拍第113页| 国产精品资源在线| 三区精品视频| 中文在线资源| 精品国产一区二区亚洲人成毛片| 91视频最新网址| 视频在线在亚洲| 国产精品青青草| 国产在线观看a| 欧美亚洲国产bt| 国产呦小j女精品视频| 重囗味另类老妇506070| 国产精品视频一区国模私拍 | 日韩中文在线视频| 伊人久久综合视频| 成人黄色av网站在线| 一区二区三区日韩视频| 激情欧美一区二区三区黑长吊| 亚洲欧美激情精品一区二区| 国产无人区码熟妇毛片多| 国产99久久精品| 日韩视频 中文字幕| vam成人资源在线观看| 一区二区三欧美| 中文字幕 自拍偷拍| 国产午夜亚洲精品理论片色戒| 337p粉嫩大胆噜噜噜鲁| 精品嫩草影院| 91av国产在线| 天堂av电影在线观看| 欧美日韩在线第一页| aa片在线观看视频在线播放| 99精品国产在热久久婷婷| 国产99午夜精品一区二区三区 | 精品电影在线| 色欧美日韩亚洲| 四虎永久免费在线观看| 天堂资源在线中文精品| 日本一区二区在线视频观看| 成人国产激情在线| www.欧美免费| av av片在线看| 夜夜精品视频一区二区| 欧美激情国内自拍| 国产综合精品一区| 国产女主播一区二区三区| 日本三级一区| 国产午夜一区二区| 中文字幕在线观看高清| 亚洲桃色在线一区| 动漫av在线免费观看| 日韩视频一区| 欧美亚洲丝袜| 国产黄色一区| 欧美日韩999| 色婷婷av一区二区三| 日韩欧美在线视频观看| 真实乱视频国产免费观看 | japanese在线观看| 国产日韩欧美一区在线| 天天综合色天天综合色hd| 91麻豆精品国产91久久久更新资源速度超快| 久久精品国产2020观看福利| 午夜精品久久久久久久99| 天天免费综合色| gv天堂gv无码男同在线观看 | 中文在线一区二区三区| 日韩和欧美一区二区| 中文精品一区二区三区 | 亚洲国产精品网站| 欧美一级淫片免费视频黄| 国产精品国产三级国产aⅴ原创| 丰满少妇一区二区三区专区| 午夜在线播放视频欧美| 一本久久a久久精品vr综合| 97se亚洲| 国产精品久久久久久久久借妻 | 欧美破处大片在线视频| 欧美日韩亚洲一区二区三区四区| 国产欧美日韩电影| 国产福利精品av综合导导航| 91高清在线观看视频| 亚洲欧洲日产国码av系列天堂| www.天天干.com| 色天使色偷偷av一区二区| 在线免费日韩av| 国产女人水真多18毛片18精品视频 | 日本在线中文字幕一区二区三区| 久久精品99久久香蕉国产色戒| 人成在线免费视频| 欧美r级在线观看| 中文字幕精品无码亚| 婷婷开心激情综合| 特一级黄色录像| 久久精品一区四区| 精品人妻在线视频| 精品亚洲免费视频| 日韩av在线综合| 伊人激情综合| 免费成人深夜夜行网站视频| 欧美日韩国产传媒| 久久久7777| 国产精品极品在线观看| 亚洲综合小说区| 亚洲aⅴ网站| 国产精品女主播视频| 中文在线8资源库| 久久人91精品久久久久久不卡| 成年人黄视频在线观看| 国产一区二区三区在线观看网站 | 91精品国产高清自在线看超| av中文字幕在线播放| 中文字幕亚洲一区| 国产资源在线观看| 日韩av在线一区二区| 日本毛片在线观看| 亚洲成人网在线观看| 精品毛片在线观看| 91精品国产一区二区| 亚洲视频久久久| 欧美午夜精品久久久久久孕妇 | 极品久久久久久| 国产精品乱码一区二三区小蝌蚪| 无码少妇精品一区二区免费动态| 91亚洲永久精品| 菠萝菠萝蜜网站| 99国产精品久久久久| 亚洲精品中文字幕在线播放| 本田岬高潮一区二区三区| 国产原创剧情av| 北条麻妃一区二区三区| 欧洲熟妇的性久久久久久| 成人毛片老司机大片| 黑森林av导航| 99麻豆久久久国产精品免费优播| 日批在线观看视频| 91麻豆精品在线观看| 国产精品免费无码| 中文字幕+乱码+中文字幕一区| 欧美人与禽zoz0善交| 亚洲色图视频免费播放| 久久久久久久久久久97| 香蕉加勒比综合久久| 羞羞影院体验区| 日韩欧美亚洲范冰冰与中字| 手机av免费观看| 欧美日免费三级在线| av无码精品一区二区三区宅噜噜| 精品剧情在线观看| 手机福利在线| 在线观看久久久久久| 九七久久人人| 97国产精品久久| 向日葵视频成人app网址| 国产精品视频久久久| 日韩精品三级| 欧美高清视频一区| 日本久久黄色| 欧美一级中文字幕| 免播放器亚洲| 亚洲美女性囗交| 国产+成+人+亚洲欧洲自线| 亚洲精品中文字幕在线播放| 国产精品乱人伦| 国产一级在线免费观看| 日本韩国欧美在线| 国产毛片久久久久| 亚洲精品成人久久| 色的视频在线免费看| 国内精品模特av私拍在线观看| 国产日韩另类视频一区| 91日本在线观看| 久久九九热re6这里有精品| 亚洲 国产 欧美一区| 国内精品亚洲| 在线观看国产一级片| 成人a免费在线看| 在线观看亚洲大片短视频| 一区二区免费视频| 中文字幕第2页| 日韩美女av在线| a视频在线观看| 国产精品老女人精品视频| 精品久久ai电影| 成年人免费观看的视频| 国产精品视区| 美女网站视频在线观看| 国产精品久久久久久久久晋中 | 玖玖在线精品| 国产人妖在线观看| 中文欧美字幕免费| 欧美成人国产精品高潮| 欧美三级三级三级爽爽爽| 少妇一区二区三区四区| 美女少妇精品视频| xxxxx.日韩| 欧美重口乱码一区二区| 伊人激情综合| 亚洲第一色av| 日本一区二区不卡视频| 九九热精品视频在线| 日韩欧美中文字幕制服| 黄色av免费在线| 国产精品十八以下禁看| 国产伦精品一区二区三区视频| 国产中文字幕在线免费观看| 国产高清亚洲一区| 午夜剧场免费在线观看| 欧美三级在线看| 成人在线观看一区| 亚洲国产精品一区二区尤物区| 99re热视频| 亚洲精品影视在线观看| heyzo一区| 成人自拍偷拍| 欧美国内亚洲| 97超碰免费在线观看| 中文字幕中文在线不卡住| 成人黄色片在线观看| 一区二区三区视频免费| 精品亚洲美女网站| 日韩一本精品| 日韩中文字幕麻豆| 中文字幕免费高清| 欧美探花视频资源| 国产美女视频一区二区三区| 国产精品ⅴa在线观看h| 国产99久久久国产精品成人免费 | 国内精品国产三级国产a久久| 日韩av网站在线播放| 欧美日韩一区二区欧美激情| 在线看的av网站| 成人高清视频观看www| 99热国内精品永久免费观看| 天堂中文av在线| 亚洲欧美电影一区二区| 中文字幕 日韩 欧美| 亚洲黄色av一区| 亚洲第一天堂网| 午夜精品一区二区三区在线视 | 久久精品电影一区二区| 国产精品日本一区二区不卡视频| 大桥未久一区二区三区| 国产成人av电影在线观看| 日韩毛片在线视频| 亚洲欧洲国产伦综合| 欧美高清xxx| 18视频在线观看娇喘| 国产a视频精品免费观看| 日本亚洲色大成网站www久久| 国产婷婷97碰碰久久人人蜜臀| 香蕉成人av| 中文字幕超清在线免费观看| 成人免费看的视频| 日韩在线 中文字幕| 日韩在线观看免费高清完整版| 97久久超碰| 2022亚洲天堂| 中文字幕一区二区三区不卡在线| 国产夫妻性生活视频| 97婷婷涩涩精品一区| 成人一区而且| 无码人妻丰满熟妇啪啪网站| 欧美午夜视频在线观看| 日本成人在线播放| 国产精品久久久久久久久久久久冷| 久久精品国产清高在天天线| 北条麻妃在线观看视频| 亚洲第一视频网| 国产韩日精品| 欧美国产日韩激情| 亚洲国产精品精华液2区45| 午夜精品久久久久久久96蜜桃| 日韩av成人在线观看| 亚洲欧洲美洲一区二区三区| 实拍女处破www免费看| 欧美一区二区三区爱爱| 日本不卡一二三| 亚洲av综合色区| 国产午夜久久久久| 午夜精品久久久久久久第一页按摩 | 精品视频一二| 国产偷人视频免费| 亚洲乱码日产精品bd| 免费播放片a高清在线观看|