Change temp names created by listcomps from [%d] to _[%d], so the one-liner
    [k for k in dir() if k[0] != "_"]
can be used to get the non-private names (used to contain "[1]").
diff --git a/Python/compile.c b/Python/compile.c
index 916c4a6..c562def 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1309,7 +1309,7 @@
 {
 	/* listmaker: test list_for */
 	char tmpname[12];
-	sprintf(tmpname, "[%d]", ++c->c_tmpname);
+	sprintf(tmpname, "_[%d]", ++c->c_tmpname);
 	com_addoparg(c, BUILD_LIST, 0);
 	com_addbyte(c, DUP_TOP); /* leave the result on the stack */
 	com_push(c, 2);
@@ -4689,7 +4689,7 @@
 {
 	char tmpname[12];
 
-	sprintf(tmpname, "[%d]", ++st->st_tmpname);
+	sprintf(tmpname, "_[%d]", ++st->st_tmpname);
 	symtable_add_def(st, tmpname, DEF_LOCAL);
 	symtable_assign(st, CHILD(n, 1), 0);
 	symtable_node(st, CHILD(n, 3));