The patch currently only fixes "native" (readline-based) completion. If it is agreed that this is the correct direction I can prepare a similar patch for the non-native / legacy completion function `python-shell-completion-get-completions', which shows the same behavior.

On Sat, 27 Aug 2016 at 14:47 Dan Davison <dandavison7@gmail.com> wrote:
Here is the patch pasted into the body of an email:

From 8e69b33a53ea30389a5e3946dd711320a77e0d23 Mon Sep 17 00:00:00 2001
From: Dan Davison <dandavison7@gmail.com>
Date: Fri, 5 Aug 2016 12:19:20 -0700
Subject: [PATCH] Don't strip space from python completions

The returned completion deliberately includes a space after a word like
'import', which is always followed by more words.

* lisp/progmodes/python.el (python-shell-completion-native-get-completions):
Remove space from regular expression character class
---
 lisp/progmodes/python.el | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index ad69f87..8616279 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -3551,7 +3551,7 @@ completion."
                  (split-string
                   (buffer-substring-no-properties
                    (line-beginning-position) (point-min))
-                  "[ \f\t\n\r\v()]+" t)
+                  "[\f\t\n\r\v()]+" t)
                  :test #'string=))))
         (set-process-filter process original-filter-fn)))))
 
-- 
2.3.2 (Apple Git-55)


On Sat, 27 Aug 2016 at 14:21 Dan Davison <dandavison7@gmail.com> wrote:
Patch attached.

This patch is also available as a pull request at at https://github.com/dandavison/emacs/pull/1 The commit hash is 8e69b33a53ea30389a5e3946dd711320a77e0d23.

I have only tested this on macOS. As far as I am aware, when the space character is present, it is present deliberately and it is appropriate to retain it, but I would appreciate feedback from python.el experts.

On Sat, 27 Aug 2016 at 14:10 Dan Davison <dandavison7@gmail.com> wrote:
From emacs -Q:

(setq python-shell-interpreter "ipython"
      python-shell-interpreter-args "-i")

M-x run-python

In the python comint buffer insert "from itertools imp" and hit tab.

You will see "imp" completed as "import" (no trailing space).

However, if you do this in ipython itself, you will see "imp" completed
as "import ". This (i.e. what ipython does) is the desired behavior
(because import is always followed by another word).

In GNU Emacs 25.1.50.1 (x86_64-apple-darwin14.5.0, NS appkit-1348.17 Version 10.10.5 (Build 14F27))
 of 2016-04-16 built on hemiprocne
Repository revision: 934549e23d6bda5231375dbfed7b42a966c85d14
Windowing system distributor 'Apple', version 10.3.1348
Configured using:
 'configure --prefix=/usr/local/Cellar/emacs/HEAD
 --enable-locallisppath=/usr/local/share/emacs/site-lisp
 --infodir=/usr/local/Cellar/emacs/HEAD/share/info/emacs --with-xml2
 --without-dbus --without-gnutls --with-ns --disable-ns-self-contained'

Configured features:
JPEG NOTIFY ACL LIBXML2 ZLIB TOOLKIT_SCROLL_BARS NS

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message dired dired-loaddefs format-spec
rfc822 mml easymenu mml-sec password-cache epa derived epg epg-config
gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
ietf-drums mm-util mail-prsvr mail-utils time-date mule-util tooltip
eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel
term/ns-win ns-win ucs-normalize term/common-win tool-bar dnd fontset
image regexp-opt fringe tabulated-list newcomment elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow timer select scroll-bar
mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame
cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai
tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian
slovak czech european ethiopic indian cyrillic chinese charscript
case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer
cl-preloaded nadvice loaddefs button faces cus-face macroexp files
text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote kqueue cocoa ns
multi-tty make-network-process emacs)

Memory information:
((conses 16 195970 9329)
 (symbols 48 19431 0)
 (miscs 40 43 170)
 (strings 32 14792 5110)
 (string-bytes 1 431078)
 (vectors 16 32763)
 (vector-slots 8 640839 4764)
 (floats 8 156 54)
 (intervals 56 194 0)
 (buffers 976 11))